在 c + + 中将非常数转换为常数

我知道你可以使用 const_castconst强制转换为非 const

但是,如果要将非 const转换为 const,应该使用什么?

96587 次浏览

如果愿意,可以使用 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

见: http://en.cppreference.com/w/cpp/utility/as_const

用途:

CallFunc( as_const(variable) );

而不是:

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