为什么decltype((i))是引用类型但是decltype(i + 0)是int类型?

时间:2017-03-17 14:42:08

标签: c++ c++11

我正在学习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类型?

1 个答案:

答案 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一样。