在C++中将指针变量赋值给常量int?

9

我希望你能为我解释以下内容:如果我写下

int i = 0;
float* pf = i;

我遇到了一个编译错误(gcc 4.2.1):

error: invalid conversion from ‘int’ to ‘float*’

有道理 - 它们显然是两种完全不同的类型。但如果我写成:
const int i = 0;
float* pf = i;

它编译时没有错误。为什么在赋值的右侧使用“const”会有所不同?“const”关键字的一部分不是要强制实施常量值的类型约束吗?

我能想到的任何解释都感觉有点虚假。而且我的解释也无法解释这个事实。

const int i = 1;
float* pf = i;

无法编译。有人能给出解释吗?

1个回答

10
你的第二个示例仅仅是符合在C++03中指定的转换规则的(§4.10/1):

一个空指针常量是一个整型常量表达式(5.19),它的右值为零。一个空指针常量可以转换成指针类型;结果是该类型的空指针值,并且可以与任何其他对象或函数类型的指针值区分开来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接