在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的铸造操纵对象的常量,可以设置或删除。