【发布时间】:2014-01-21 19:13:37
【问题描述】:
我相信这可能适用于许多 T,但我确信这适用于整数。作为学习 C++ 的一部分,我试图用标准中的语言来解释以下行为。
typedef const int * constintptr;
typedef int * intptr;
intptr p;
constintptr cp = p;
const constintptr& crcp = p;
//constintptr & rcp = p;
通过查看 n3337,第 8.5.3 节。似乎这种行为是通过说 int* 可转换为 const int * prvalue 来解释的,但与引用不兼容。 (如果我错了,请纠正我)。
我看到这是可取的行为(或者我们可以颠覆 const),而这种行为的可取性不是这个问题的意义所在。
问题是在标准中指定(或暗示)它们 intptr 和 constintptr 不兼容引用。
【问题讨论】:
-
我认为这很简单:
p不是constintptr类型的值。你可以 convert 它,它给出一个临时的,因此是一个右值,但右值不绑定到左值引用。 -
我相信,唯一与引用兼容的东西是一些常见继承层次结构中的派生类。
标签: c++ pointers c++11 constants