从this answer到“何时应使用static_cast,dynamic_cast,const_cast和reinterpret_cast?”这个问题:
C样式强制转换和函数样式强制转换分别是使用
(type)object
或type(object)
进行的强制转换。
然后它开始列出C样式强制转换的行为,但从不告诉函数样式强制转换是否相同。
我之所以问是因为Resharper for C ++在C样式强制转换时会警告我,而在函数样式强制转换时不会警告我:
函数样式案例与C样式强制转换有何不同?或者,如果它们相同,是否是Resharper中的bug,它也应该发出警告? int(d)
使用安全吗?它看起来比建议的static_cast<int>(d);
简单得多。
答案 0 :(得分:5)
我没有标准的引号,但是cppreference通常就足够了。
函数强制转换表达式由简单类型说明符或typedef说明符组成(换句话说,单字类型名称:
unsigned int(expression)
或int*(expression)
无效),后跟一个表达式在括号内。 此强制转换表达式与相应的C样式强制转换表达式完全相同。
对于Resharper来说, C ++ cast 可能包含功能转换,因为仅在C ++中有效。
您在问题中链接的答案说明了功能强制转换的安全性。就您而言,int(d)
应该等效于static_cast<int>(d)
。但是通常,C样式或函数类型转换是不安全的,因为在某些情况下,它们可能等效于reinterpret_cast
,例如(double*)some_int_ptr
。