1

由于 auto 和 decltype 都用于推断类型。我以为他们会是一样的。

然而,这个问题的答案却表明并非如此。

我仍然认为它们不能完全不同。我可以想到一个简单的例子,i在以下两种情况下,类型都是相同的。

auto i = 10; and decltype(10) i = 10;

那么 auto 和 decltype 表现相同的可能情况是什么。

4

1 回答 1

7

auto行为与模板参数推导完全相同,这意味着如果您不指定对它的引用,则不会得到。decltype只是表达式的类型,因此考虑了引用:

#include <type_traits>

int& get_i(){ static int i = 5; return i; }

int main(){
  auto i1 = get_i(); // copy
  decltype(get_i()) i2 = get_i(); // reference
  static_assert(std::is_same<decltype(i1), int>::value, "wut");
  static_assert(std::is_same<decltype(i2), int&>::value, "huh");
}

Ideone 上的实时示例。

于 2012-07-12T20:21:13.293 回答