指针与空字符合法比较?

Pra*_*atu 3 c++

比较指向'\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)时,我没有在这两个标准中得到错误

Seb*_*edl 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及以上版本中实施.)