要添加const
到非常量对象,首选方法是什么?const_cast<T>
或static_cast<T>
。在最近的一个问题中,有人提到他们更喜欢使用static_cast
,但我认为这const_cast
会使代码的意图更加清晰。那么使用static_cast
变量 const 的论据是什么?
问问题
9051 次
4 回答
17
也不要使用。初始化一个引用对象的 const 引用:
T x;
const T& xref(x);
x.f(); // calls non-const overload
xref.f(); // calls const overload
或者,使用implicit_cast
函数模板,例如Boost 中提供的模板:
T x;
x.f(); // calls non-const overload
implicit_cast<const T&>(x).f(); // calls const overload
static_cast
考虑到和之间的选择const_cast
,static_cast
绝对是更可取的: const_cast
应该只用于丢弃constness,因为它是唯一可以这样做的演员,并且丢弃 constness 本质上是危险的。通过丢弃 const 获得的指针或引用修改对象可能会导致未定义的行为。
于 2010-08-04T03:15:46.800 回答
3
我想说static_cast
的是最好的,因为它只允许你从非const
到const
(这是安全的)投射,而不是在另一个方向(这不一定是安全的)。
于 2010-08-04T03:16:47.170 回答
2
这是implicit_cast函数模板的一个很好的用例。
于 2010-08-04T03:20:16.383 回答
1
您可以编写自己的演员表:
template<class T>
const T & MakeConst(const T & inValue)
{
return inValue;
}
于 2010-08-04T08:47:15.843 回答