c++11支持用decltype推断变量/表达式的类型,与auto推断不同,decltype并不会计算表达式的值。
decltype会准确的返回变量/表达式的类型,即使是数组这种比较复杂的类型也不例外。
int A[10]{};
decltype(A) B{}; // A和B类型完全相同

唯一的例外是,如果括号内是一个表达式(不是变量),且计算结果是左值(可以放在等号左侧),那么返回的类型是表达式结果的引用类型,举两个例子说明。
例子一
int i = 1, *p = &i;
// *p是左值,所以ref是i的引用
decltype(*p) ref = i;

例子二
int n = 123;
decltype(n) i1 = 2;
// (n) 被当成表达式,所以i2是n的引用
decltype((n)) i2 = n;

本文深入探讨C++11中decltype的使用方法及其特性,包括如何准确推断变量及表达式的类型,以及处理数组和左值引用的特殊情况。通过具体示例,帮助读者理解decltype在复杂场景下的应用。
1083





