我是 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/