c++ - 为什么语句int null = 0, *p = null 是非法的?

标签 c++ pointers c++11 nullptr

我是 C++ 的新手,正在尝试学习指针的概念。有人能告诉我为什么下面的 C++ 语句是非法的吗?在我看来这是合法的,但有人告诉我这是非法的。

int null = 0, *p = null;

最佳答案

C++ 标准允许为指针分配值 0 作为常量。

然而,代码:

int null = 0;
int *p = null; 

没有将p设置为常量0,而是将其设置为null的值,这是一个整型变量。

如果我们稍微概括一下,将 int null = 0; 放在一行中,将 int *p = null; 放在完全不同的一行中,有一些之间的代码。没有人说中间的代码不执行 null = 4; - 但是,我不认为这是不允许这样做的主要原因,而是它更容易编写一个编译器检查“这是整数常量 0”而不是“这个命名常量的值为零”。如果常量来自另一个编译单元(链接时间常量)怎么办?

此外,阅读 0 比拥有 46 种不同的编码标准要容易得多,每种编码标准对 null 使用不同的名称。

请注意,即使您使 const int null = 0;,它仍然不是常量 0 - 它是一个与 0 具有相同值的常量,但在词法上与 0 不同。

关于c++ - 为什么语句int null = 0, *p = null 是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561656/

相关文章:

C++ 基准测试, volatile

c++ - 覆盖 "new"时编译报错

c++ - 基于范围的for循环和std::vector:元素是按顺序处理的吗?

c - 为什么我的链表头指向头前的2项

c++ - 使用可变参数模板的显式模板实例化

c++ - 重载 >> 使用字符串类

c++ - 指定的 CryptoAPI 算法无效

c++ - 控制转移绕过 :? 的初始化

c - 在这种情况下,通过指针或通过值传递结构有什么区别?

c++ - 在堆上声明对象然后通过引用传递它?