const_cast vs static_cast

Ant*_*ony 11 c++ casting const implicit-conversion

要添加const到非const对象,这是首选方法?const_cast<T>static_cast<T>.在最近的一个问题中,有人提到他们更喜欢使用static_cast,但我认为这const_cast会使代码的意图更加清晰.那么使用static_cast变量const 的论据是什么?

Jam*_*lis 14

不要使用任何一种.初始化引用该对象的const引用:

T x;
const T& xref(x);

x.f();     // calls non-const overload
xref.f();  // calls const overload
Run Code Online (Sandbox Code Playgroud)

或者,使用implicit_cast函数模板,如Boost中提供的模板:

T x;

x.f();                           // calls non-const overload
implicit_cast<const T&>(x).f();  // calls const overload
Run Code Online (Sandbox Code Playgroud)

如果可以选择之间static_castconst_cast,static_cast绝对是最好: const_cast应该只用来抛弃常量性,因为它是可以这样做的唯一的演员,和虚掷常量性是极其危险的.通过抛弃const而获得的指针或引用修改对象可能导致未定义的行为.