Kno*_*abe 8 c++ decltype c++11
作为一般规则,decltype
保留constness:
const int ci = 0;
decltype(ci) x; // x is const int
x = 5; // error--x is const
class Gadget{}:
const Gadget makeCG(); // factory
decltype(makeCG()) y1, y2; // y1 and y2 are const Gadgets
y1 = y2; // error--y1 is const
Run Code Online (Sandbox Code Playgroud)
但对于const
返回基本类型的返回类型,decltype
似乎扔掉const
了:
const int makeCI(); // factory
decltype(makeCI()) z; // z is NOT const
z = 5; // okay
Run Code Online (Sandbox Code Playgroud)
为什么decltype
在这种情况下丢弃常量?我的意思是两个方面的问题:
谢谢.
Jam*_*lis 16
你观察到的行为是正确的: decltype(makeCI())
是int
,不是int const
.
的makeCI()
函数调用表达式是一个prvalue表达.Per C++11§3.10[basic.lval]/4:
类prvalues可以具有cv限定类型; 非类prvalues始终具有cv不合格类型.
术语"cv-qualification"是指const-and volatile-qualification. int
不是类类型,因此rvalue表达式的类型makeCI()
是,int
并且它不是const限定的.
(在最近的C++语言标准草案中,例如N3690,该文本已被删除,并被§5[expr]/6中的新文本取代,其中指出,"如果prvalue最初具有"cv T"类型,则其中T是一个cv不合格的非类非数组类型,在进行任何进一步分析之前,表达式的类型调整为T."有关详细信息,请参阅CWG缺陷1261.)
归档时间: |
|
查看次数: |
1405 次 |
最近记录: |