考虑以下 C++11 程序及其在 GCC 4.7.2 中的结果:
int main()
{
constexpr int i = 0;
int* p = i;
}
// g++ -g -ggdb -Wall -Wextra -pedantic -std=c++11 t.cpp
// t.cpp: In function 'int main()':
// t.cpp:4:13: error: invalid conversion from 'int' to 'int*' [-fpermissive]
// t.cpp:4:9: warning: unused variable 'p' [-Wunused-variable]
根据标准:
[C++11: 4.10/1]:
空指针常量是整数类型的整数常量表达式 (5.19) prvalue,其计算结果为零 [.. ]
5.19 是一团糟,我未能完全解析它,但我们难道不希望i
满足这个标准并充当空指针常量,因此不需要显式转换int*
为 的初始化p
?
如果我s/constexpr/const/
使用-ansi
而不是编译,则编译成功-std=c++11
。