2017-03-17 60 views
3

我学习C++底漆第五edtion,示例代码真糊涂me.It是如下面的代码相似:为什么decltype((i))是引用类型,但decltype(i + 0)是int类型?

int i,&k=i; 
decltype((i)) t; //error: t must be initialized 
decltype(k+0) s = 45; //OK,s is int type 

为什么两个是表达式和​​第一个是引用类型,但第二个是int类型?

+1

主要是因为标准是这样说的。您是否在寻找标准报价或动机是什么? – TartanLlama

+0

我猜[这里](http://eel.is/c++draft/dcl.type.simple#4)是为什么(以及类似的例子也是如此)。 – skypjack

回答

2
decltype((i)); 

将产生的参考类型,因为i是一个左值。这对确定任何表达式的value category很有用。再现形式cppreference,对于括号表达式(重点煤矿):

一个。如果表达式的值类别是xvalue,则decltype收益率 T & &;

b。如果表达的值类别是左值,则decltype收益率 T &;

c。如果表达式的值类是prvalue,然后decltype 产量Ť


decltype(k+0) 

将产生结果k+0表达式会的类型。正如auto val = k + 0;会推断val

相关问题