指针引用const null值
Pointer to reference to const null value
这是代码:
const int x = 0;
const int& r = x;
const int* p1 = x; // Works (p1 = 0)
const int* p2 = r; // error C2440: 'initializing': cannot convert from 'const int' to 'const int *'
为什么p1设置为x的值,而不是p2?
是因为P2不能保证X仅通过查看R?
还是对引起此错误的参考有其他微妙的信息?
第三行应引起错误。它不在VS2015中,因为编译器或标准中的错误,具体取决于应用标准。其他编译器确实会发出有关此行的错误消息。
在C 11之前,任何评估为0的积分常数表达式都被视为 null指针常数,因此第一行等于 const int* p1 = NULL;
指向x 。
由于C 14不再是这种情况。粗略地说,只有字面的零和nullptr
是有效的空指针常数。
在两者之间,即在C 11中,该标准实际上允许评估为零的常数表达式被视为零指针常数。这被认为是标准中的缺陷。它固定在C 14中。一些编译器(GCC,Clang)选择立即修复缺陷,即使在C 11模式下也会报告错误。VS2015没有。
第四行在任何版本的C 中从未有效,因为r
的类型是参考,而不是整数。
指针代表一个值的地址,因此要初始化您的指针,应使用"地址"操作员:&
const int *p1 = &x;
const int *p2 = &r;
您可以将指针设置为0
(这不是PC上的有效地址),因为这与将其设置为NULL
。