在c ++中将非const转换为const
我知道你可以使用const_cast将一个const转换为非const 。
但是,如果你想将非const为const你应该使用什么?
可以使用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的铸造操纵对象的常量,可以设置或删除。