我正在阅读C ++ Primer,第5版,其中p。他们首先给出了这个代码示例:
const int ci = 0, &cj = ci;
decltype(ci) x = 0;
decltype(cj) y = x;
decltype(cj) z; //error
然后他们说:
值得注意的是,
decltype
是唯一一个定义为引用的变量不被视为它引用的对象的同义词的上下文。
这是什么意思?我不明白。 y
指的是x
。那捕获的是什么?
答案 0 :(得分:9)
我相信他们试图说decltype(cj)
不会给你cj
引用的对象的类型(即const int
),但会给你类型cj
本身。因此y
将是const int&
。
与此进行比较的情况是在表达式中使用引用的名称时。标准说:
如果表达式最初具有“对T的引用”类型(8.3.2,8.5.3),则在进行任何进一步分析之前将类型调整为T.表达式指定由引用表示的对象或函数,表达式是左值或x值,具体取决于表达式。
也就是说,当在表达式中使用引用的名称时,它不是被引用的引用,而是它所引用的对象。这就是为引用类型提供“别名”功能的原因。