C样式的转换是否与函数样式的转换相同?

时间:2018-10-21 22:00:57

标签: c++ casting

this answer到“何时应使用static_cast,dynamic_cast,const_cast和reinterpret_cast?”这个问题:

  

C样式强制转换和函数样式强制转换分别是使用(type)objecttype(object)进行的强制转换。

然后它开始列出C样式强制转换的行为,但从不告诉函数样式强制转换是否相同。

我之所以问是因为Resharper for C ++在C样式强制转换时会警告我,而在函数样式强制转换时不会警告我:

Resharper screenshot

函数样式案例与C样式强制转换有何不同?或者,如果它们相同,是否是Resharper中的bug,它也应该发出警告? int(d)使用安全吗?它看起来比建议的static_cast<int>(d);简单得多。

1 个答案:

答案 0 :(得分:5)

我没有标准的引号,但是cppreference通常就足够了。

Explicit type conversion

  

函数强制转换表达式由简单类型说明符或typedef说明符组成(换句话说,单字类型名称:unsigned int(expression)int*(expression)无效),后跟一个表达式在括号内。 此强制转换表达式与相应的C样式强制转换表达式完全相同。

对于Resharper来说, C ++ cast 可能包含功能转换,因为仅在C ++中有效。

您在问题中链接的答案说明了功能强制转换的安全性。就您而言,int(d)应该等效于static_cast<int>(d)。但是通常,C样式或函数类型转换是不安全的,因为在某些情况下,它们可能等效于reinterpret_cast,例如(double*)some_int_ptr