decltype和auto之间的等价性

equivalence between decltype and auto

本文关键字:之间 auto decltype      更新时间:2023-10-16

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

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

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

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

那么,在哪些可能的情况下,auto和decltype的行为会相当。

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上的实例。