我是C++的新手,正在尝试学习指针的概念.有人能告诉我为什么下面的C++声明是非法的吗?在我看来,这是合法的,但我被告知它是非法的.
int null = 0, *p = null;
小智.. 6
如果您尝试编译此代码,则应该收到以下错误:
error: cannot initialize a variable of type 'int *' with an lvalue of type 'int'
基本上发生的是你正在尝试用变量初始化一个指针.C++中唯一允许的是将指针直接指定给零.
int * p = 0;
像上面这样的例子就可以了.
如果您尝试编译此代码,则应该收到以下错误:
error: cannot initialize a variable of type 'int *' with an lvalue of type 'int'
基本上发生的是你正在尝试用变量初始化一个指针.C++中唯一允许的是将指针直接指定给零.
int * p = 0;
像上面这样的例子就可以了.
C++标准允许将指针赋值0
为常量.
但是,代码:
int null = 0; int *p = null;
如果没有设置p
为常量0
,则将其设置为值null
,即整数变量.
如果我们稍微概括一下,并且放在int null = 0;
一条线上,并且int *p = null;
在一条完全不同的线上,中间有一些代码.没有什么可以说中间的代码没有null = 4;
- 但是,我不认为这是不允许这样做的主要原因,而是更容易编写一个检查的编译器"这是整数常量0 "than"是这个名为零值的常量".如果常量来自另一个编译单元(链接时间常量)怎么办?
此外,阅读0
比拥有46种不同的编码标准要容易得多,每种标准都使用不同的名称null
.
请注意,即使你做了const int null = 0;
,它仍然不是常量0
- 它是一个相同值的常量0
,但不是相同的,词法上,如0
.