要向非常数对象添加const,首选的方法是const_cast<T>还是static_cast<T>。在最近的一个问题中,有人提到他们更喜欢使用static_cast,但我认为const_cast会让代码的意图更清晰。那么使用static_cast使变量为const的理由是什么呢?
发布于 2010-08-04 11:15:47
这两种方法都不要使用。初始化引用对象的常量引用:
T x;
const T& xref(x);
x.f(); // calls non-const overload
xref.f(); // calls const overload或者,使用the one provided in Boost之类的implicit_cast函数模板
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应该只用于丢弃常量,因为它是唯一可以这样做的类型,而丢弃常量本质上是危险的。通过抛出常量而获得的指针或引用修改对象可能会导致未定义的行为。
发布于 2010-08-04 11:16:47
我想说static_cast更可取,因为它只允许你从非const转换到const (这是安全的),而不是在另一个方向(这不一定是安全的)。
发布于 2010-08-04 11:20:16
这是implicit_cast函数模板的一个很好的用例。
https://stackoverflow.com/questions/3402318
复制相似问题