所有人: 这段引用来自《Effective C++第三版》
const_cast通常用于去除对象的const属性。它是唯一可以这样做的C++类型转换。
我的问题是:const_cast能否给非const对象添加const属性? 实际上,我写了一个小程序试图证明我的想法。
class ConstTest
{
public:
void test() {
printf("calling non-const version test const function \n");
}
void test() const{
printf("calling const version test const function \n");
}
};
int main(int argc,char* argv){
ConstTest ct;
const ConstTest cct;
cct.test();
const_cast<const ConstTest&>(ct).test();//it is wrong to write this statement without the '&',why
}
省略'&'会导致以下错误:
错误 C2440: 'const_cast' : 无法从 'ConstTest' 转换为 'const ConstTest'
这表明const_cast可以添加const属性,但似乎必须强制转换为对象引用,那么这个引用的神奇之处是什么呢?
static_cast
,但对我来说为什么const_cast
也不起作用并不明显) - Tyler McHenrystatic_cast
将其转换为常量引用。 - Alexandre C.const_cast
用于此目的,因为这种类型的转换的逻辑目的是更改变量的 const 特性。 - Tyler McHenry