【发布时间】:2019-03-25 23:51:12
【问题描述】:
从this answer到问题“什么时候应该使用static_cast、dynamic_cast、const_cast和reinterpret_cast?”:
C 风格转换和函数风格转换分别使用
(type)object或type(object)进行转换。
然后它开始列出 C 风格转换的行为,但从不告诉函数风格转换是否相同。
我之所以问,是因为 Resharper for C++ 会在 C 样式转换的情况下警告我,但在函数样式转换的情况下不会警告我:
函数样式的情况与 C 样式的转换有何不同?或者,如果它们相同,它是否是 Resharper 中的一个错误,它也应该发出警告? int(d) 可以安全使用吗?它看起来比建议的static_cast<int>(d); 简单得多。
【问题讨论】:
-
请注意,
d的两个转换是完全不同的语句。一个是初始化,另一个是赋值。你真的应该比较int i = int(d); int j = (int)d;或int i; i = int(d); i = (int)d; -
@Caleth:编译器不会将两种方式都优化成相同的结果吗?
-
在
ints的情况下?是的。一般来说?不。但我的观点是关于声明和赋值有不同的语言规则。