当前位置:  开发笔记 > 编程语言 > 正文

static_cast <int>(foo)vs.(int)foo

如何解决《static_cast<int>(foo)vs.(int)foo》经验,为你挑选了2个好方法。

有人可以详细说明这些差异吗?



1> jalf..:

不同之处在于(int)foo可能意味着六种不同的东西.它可能是static_cast(在静态已知类型之间转换),它可能是const_cast(添加或删除const),或者它可能是reinterpret_cast(在指针类型之间转换)

编译器会尝试每一个,直到找到一个有效的方法.这意味着它可能并不总是选择您期望的那个,因此它可能成为错误的微妙来源.

此外,static_cast更容易搜索或搜索/替换.



2> Christoph..:

看看Stroustrup对此有何看法,包括以下内容:

因为C样式转换(T)可以用来表达许多逻辑上不同的操作,所以编译器只有最小的机会来捕获误用.[...]

引入了"新式演员阵容",使程序员有机会更清楚地表达他们的意图,并让编译器捕获更多错误.[...]

特别是,C++区分static_castreinterpret_cast:

我们的想法是,static_cast允许的转换比那些需要reinterpret_cast的转换更不可能导致错误.原则上,可以使用static_cast的结果而不将其强制转换回原始类型,而在使用它之前应始终将reinterpret_cast的结果转换回其原始类型以确保可移植性.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有