我知道你可以使用 const_cast将 const强制转换为非 const。
const_cast
const
但是,如果要将非 const转换为 const,应该使用什么?
如果愿意,可以使用 const_cast,但实际上并不需要它——非常量可以隐式地转换为常量。
可以使用 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也可以用来添加 constness 行为。
来自 Cplusplus.com:
此类型的强制转换操作 一个对象的常量,要么是 设置或被移除。
你不需要 const_cast来增加 constness:
class C; C c; C const& const_c = c;
详情请阅读此 问答。
STL 因为 C + + 17现在为这种情况提供了 std::as_const。
std::as_const
见: http://en.cppreference.com/w/cpp/utility/as_const
用途:
CallFunc( as_const(variable) );
而不是:
CallFunc( const_cast<const decltype(variable)>(variable) );