int main() {
const int x = 0;
int* y = x; // line 3
int* z = x+x; // line 4
}
标准(C ++11§4.10/ 1)
空指针常量是整数类型的整数常量表达式(5.19)prvalue,其值为: 零或
std::nullptr_t
类型的prvalue。空指针常量可以转换为指针类型; ...
有四种可能性:
答案 0 :(得分:10)
标准中的措辞因DR 903而改变。新的措辞是
空指针常量是整数文字(2.14.2),其值为零或prvalue类型为
std::nullptr_t
。
问题903涉及一个奇怪的角落案例,其中不可能产生"正确的"在模板参数为(可能为0)整数常量的某些情况下的重载决策。
显然考虑了许多可能的解决方案,但
CWG中有一个强烈的共识,即只有文字0应被视为空指针常量,而不是当前指定的任何零值常量表达式。
所以,是的,这取决于编译器是否已经实现了DR 903的分辨率。