gpt4 book ai didi

c++ - 比较指针和空字符是否合法?

转载 作者:太空狗 更新时间:2023-10-29 19:56:28 27 4
gpt4 key购买 nike

比较指向 '\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) 时,两个标准都没有出现错误

最佳答案

这是从 C++03 到 C++14 的变化。在 C++03 中,[conv.ptr]p1 表示:

A null pointer constant is an integral constant expression rvalue of integer type that evaluates to zero.

字符字面量是一个完整的常量表达式。

在 C++14 中,[conv.ptr]p1 说:

A null pointer constant is an integer literal with value zero or a prvalue of type std::nullptr_t.

字 rune 字不是整数文字,也不是 std::nullptr_t 类型。

最初发布的 C++11 版本不包含此更改;然而,它是由于缺陷报告 DR903 引入的,并在 2013 年 1 月(该 DR 的最后评论日期)之后的某个时间纳入标准。

因为更改是 DR 的结果,编译器将其视为现有标准的错误修复,而不是下一个标准的一部分,因此当 -std=c+ 时,Clang 和 GCC 都进行了行为更改+11,不仅仅是 -std=c++14。然而,显然这个变化直到 4.8 版之后才在 GCC 中实现。 (具体来说,它似乎只在 GCC 7 及更高版本中实现。)

关于c++ - 比较指针和空字符是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com