比较指向'\0'合法的指针?
关于clang ++的主干版本(25836be2c)
const char *a = "foo";
if(a == '\0')
Run Code Online (Sandbox Code Playgroud)
给出一个错误:指针和整数之间的比较('const char*'和'int')
而
if(a == 0)
Run Code Online (Sandbox Code Playgroud)
没有按预期给出任何错误.
用于与指针进行比较的空指针是否等效于空指针?这是编译器错误吗?
另一点是,此错误未显示"-std = c ++ 03"标志,但显示"-std = c ++ 11"标志.但是,当我使用g ++(v4.8.5)时,我没有在这两个标准中得到错误
这是从C++ 03到C++ 14的变化.在C++ 03中,[conv.ptr] p1说:
空指针常量是整数类型的整数常量表达式rvalue,其值为零.
字符文字是一个整数常量表达式.
在C++ 14中,[conv.ptr] p1说:
空指针常量是值为零的整数文字或类型为std :: nullptr_t的prvalue.
字符文字不是整数文字,也不是类型std::nullptr_t.
最初发布的C++ 11版本不包含此更改; 然而,它是由于缺陷报告DR903而引入的,并且在2013年1月之后(该DR的最后评论日期)的某个时间被纳入标准.
因为更改是DR的结果,所以编译器将其视为现有标准的错误修复,而不是下一个标准的一部分,因此Clang和GCC都会在-std=c++11不是何时改变行为-std=c++14.然而,显然这种变化直到4.8版之后才在海湾合作委员会中实施.(具体来说,它似乎只在GCC 7及以上版本中实施.)