首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >const_cast vs static_cast

const_cast vs static_cast
EN

Stack Overflow用户
提问于 2010-08-04 11:13:22
回答 4查看 9K关注 0票数 11

要向非常数对象添加const,首选的方法是const_cast<T>还是static_cast<T>。在最近的一个问题中,有人提到他们更喜欢使用static_cast,但我认为const_cast会让代码的意图更清晰。那么使用static_cast使变量为const的理由是什么呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-04 11:15:47

这两种方法都不要使用。初始化引用对象的常量引用:

代码语言:javascript
复制
T x;
const T& xref(x);

x.f();     // calls non-const overload
xref.f();  // calls const overload

或者,使用the one provided in Boost之类的implicit_cast函数模板

代码语言:javascript
复制
T x;

x.f();                           // calls non-const overload
implicit_cast<const T&>(x).f();  // calls const overload

考虑到在static_castconst_cast之间的选择,static_cast绝对是更可取的:const_cast应该只用于丢弃常量,因为它是唯一可以这样做的类型,而丢弃常量本质上是危险的。通过抛出常量而获得的指针或引用修改对象可能会导致未定义的行为。

票数 16
EN

Stack Overflow用户

发布于 2010-08-04 11:16:47

我想说static_cast更可取,因为它只允许你从非const转换到const (这是安全的),而不是在另一个方向(这不一定是安全的)。

票数 3
EN

Stack Overflow用户

发布于 2010-08-04 11:20:16

这是implicit_cast函数模板的一个很好的用例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3402318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档