我正在学习C ++ Primer第五版,示例代码让我很困惑。它与下面的代码类似:
int i,&k=i;
decltype((i)) t; //error: t must be initialized
decltype(k+0) s = 45; //OK,s is int type
为什么这两个是表达式,第一个是引用类型,但第二个是int类型?
答案 0 :(得分:2)
decltype((i));
将生成引用类型,因为i
是左值。这对于确定任何表达式的value category很有用。复制形式cppreference,用于带括号的表达式(强调我的):
一个。如果表达式的值类别为 xvalue ,则decltype产生 的 T&安培;&安培; 强>
湾如果表达式的值类别为 lvalue ,则decltype产生 的 T&安培; 强>
℃。如果表达式的值类别为 prvalue ,则为decltype 产量 T 。
decltype(k+0)
将生成k+0
表达式将评估的结果类型。就像auto val = k + 0;
推断出val
一样。