我知道您可以使用const_cast
将const
投射到非const
。
但是如果你想将非const
投射到const
,你应该怎么用?
答案 0 :(得分:45)
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();
}
};
答案 1 :(得分:28)
答案 2 :(得分:22)
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) );
答案 3 :(得分:5)
如果您愿意,可以使用const_cast
,但实际上并不需要 - 非const可以隐式转换为const。
答案 4 :(得分:2)
如果将非const参数传递给具有const参数
的函数,则会进行隐式转换答案 5 :(得分:2)