Bri*_*ian 6 c++ pointers language-lawyer c++11
int main() {
const int x = 0;
int* y = x; // line 3
int* z = x+x; // line 4
}
Run Code Online (Sandbox Code Playgroud)
标准(C++11§4.10/ 1)
甲空指针常数是整数表达式(5.19),用于评估至零或类型的prvalue整数类型的prvalue
std::nullptr_t
.空指针常量可以转换为指针类型; ...
有四种可能性:
第4行没问题,但第3行没有.这是因为x
并且x+x
都是常量表达式,其值为0,但只是x+x
一个prvalue.似乎gcc采用了这种解释(现场演示)
第3行和第4行都可以.虽然x
是左值,但是应用了左值到右值的转换,使得prvalue常量表达式等于0.我的系统上的clang(clang-3.0)接受第3行和第4行.
第3行和第4行都不正常.clang-3.4两行错误(现场演示).
第3行没问题,但第4行没有.(包括为了完整性,即使我尝试的编译器没有表现出这种行为.)
谁是对的?是否取决于我们正在考虑的标准版本?
归档时间: |
|
查看次数: |
278 次 |
最近记录: |