2010-05-12 76 views
9

我想知道如果任何人都可以解释以下对我说:如果我写在C++中为const int分配一个指针变量?

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; 

无法编译。任何人都可以提供解释吗?

回答

10

你的第二个例子只是恰好由转换规则来覆盖如§4.10/ 1(C++ 03)指定:

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

相关问题