我想知道是否有人可以向我解释以下内容:如果我写了
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;
无法编译。有人可以提供解释吗?
答案 0 :(得分:10)
您的第二个示例恰好被§4.10/ 1 (C ++ 03)中指定的转换规则所涵盖:
空指针常量是整数类型的整数常量表达式(5.19)rvalue,其值为零。空指针常量可以转换为指针类型;结果是该类型的空指针值,并且可以与指向对象或指向函数类型的指针的每个其他值区分开来。