在c ++中将非const转换为const

我知道你可以使用const_cast将一个const转换为非const

但是,如果你想将非constconst你应该使用什么?

可以使用const_cast来为对象删除添加常量。 当你想调用一个特定的过载时,这可能很有用。

被举的例子:

 class foo { int i; public: foo(int i) : i(i) { } int bar() const { return i; } int bar() { // not const i++; return const_cast<const foo*>(this)->bar(); } }; 

你不需要const_cast来添加const

 class C; C c; C const& const_c = c; 

请通读这个问题和答案的细节。

STL自从C ++ 17现在提供了std::as_const正是这种情况。

请参阅: http : //en.cppreference.com/w/cpp/utility/as_const

使用:

 CallFunc( as_const(variable) ); 

代替:

 CallFunc( const_cast<const decltype(variable)>(variable) ); 

如果你愿意的话,你可以使用const_cast ,但这并不是真的需要 – 非const可以隐式转换为const。

如果将非常量parameter passing给具有常量参数的函数,则会进行隐式转换

const_cast也可以用来添加const行为。

来自cplusplus.com :

这种types的铸造操纵对象的常量,可以设置或删除。