6

我正在阅读 C++ Primer,第 5 版,第 5 页。71 他们首先给出了这个代码示例:

const int ci = 0, &cj = ci;
decltype(ci) x = 0;
decltype(cj) y = x;
decltype(cj) z; //error

然后他们说:

值得注意的是,这decltype是唯一一个定义为引用的变量不被视为它所引用的对象的同义词的上下文。

他们这是什么意思?我不明白。那里y是指。x那么有什么问题呢?

4

1 回答 1

10

我相信他们试图说这decltype(cj)不会给你cj引用的对象的类型(即,const int),但会给你cj它本身的类型。y也会如此const int&

与之比较的情况是在表达式中使用引用的名称。标准说:

如果表达式最初具有类型“对 T 的引用”(8.3.2、8.5.3),则在任何进一步分析之前将类型调整为 T。表达式指定引用表示的对象或函数,表达式是左值或 x 值,具体取决于表达式。

也就是说,当在表达式中使用引用的名称时,所作用的不是引用,而是它所引用的对象。这就是为引用类型提供“别名”功能的原因。

于 2013-01-16T17:51:55.900 回答