all:这是来自Effective C++ 3rd editiion
const_cast通常用于抛弃对象的常量.它是唯一能够做到这一点的C++风格的演员.
我的问题是const_cast可以将constness添加到非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(ct).test();//it is wrong to write this statement without the '&',why }
省略'&'会导致以下错误:
错误C2440:'const_cast':无法从'ConstTest'转换为'const ConstTest'
它表明const_cast可以添加constness,但似乎你必须强制转换为对象引用,这个引用的魔力是什么?
您不需要const_cast
添加constness:
class C; C c; C const& const_c = c;
周围的其他方法需要一个const_cast
虽然
const C const_c; C& c = const_cast(const_c);
但如果您尝试使用非const操作,则行为未定义c
.
顺便说一句,如果你不使用引用,那么就要制作一个对象的副本:
C d = const_c; // Copies const_c