decltype和auto之间的等价性

时间:2012-07-12 20:17:09

标签: c++ type-inference auto decltype

因为auto和decltype都用于推断类型。我想 他们会一样的。

但是,对this问题的回答表明不然。

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

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

那么auto和decltype行为相同的可能情况是什么。

1 个答案:

答案 0 :(得分: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");
}

Live example on Ideone.