【发布时间】:2017-12-18 09:23:52
【问题描述】:
比较指向'\0' 的指针是否合法?
关于clang++的trunk版(25836be2c)
const char *a = "foo";
if(a == '\0')
报错:指针和整数的比较('const char *' and 'int')
而
if(a == 0)
没有按预期给出任何错误。
空字符不就相当于空指针与指针比较吗?这是编译器错误吗?
另外一点是,这个错误没有出现在“-std=c++03”标志上,而是出现在“-std=c++11”标志上。但是,当我使用 g++ (v4.8.5) 时,两种标准都没有出现错误
【问题讨论】:
-
请注意,较新版本的 GCC do 会出错。
-
在 C++11 之前它们是一样的; post C++11 第一个是错误
-
“空字符不就相当于空指针与指针比较吗?” - 不。这一直是一个坏习惯,从来都不是一个好主意。没有“空”字符,但有一个 NUL 字符。有一个
nullptr,但这不是一个字符。绝对没有理由将这两个概念混为一谈。 -
@Useless 其他方式:标准 C++ 中没有 NUL(这是 ASCII 的东西)。但是有一个空字符,它被定义为值为0的字符
-
@M.M - 公平点,我真的不喜欢“null”和“NULL”的命名方式,因为这似乎会引起混淆,所以我养成了称呼角色@的习惯987654325@ 稍微减少歧义。 OP:是一个“空”字符,但是将它与指针进行比较仍然没有用。
标签: c++