在C ++中将指针变量分配给const int?

时间:2010-05-12 23:54:27

标签: c++ pointers const

我想知道是否有人可以向我解释以下内容:如果我写了

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 个答案:

答案 0 :(得分:10)

您的第二个示例恰好被§4.10/ 1 (C ++ 03)中指定的转换规则所涵盖:

  

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