C风格的演员是否与功能风格的演员阵容相同?

Tho*_*ler 3 c++ casting

这个答案回答 "何时应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?":

C风格的演员表和功能风格的演员表分别使用(type)object或演员表type(object).

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

我问,因为Resharper for C++在C风格的演员阵容中警告我,但在功能风格的演员阵容中并没有警告我:

Resharper截图

功能风格的案例与C风格的演员有什么不同?或者,如果它们是相同的,它是Resharper中的一个错误,它也会发出警告吗?是否int(d)安全使用?它看起来比建议的简单得多static_cast<int>(d);.

Kev*_*vin 5

我没有标准的引用,但是cppreference通常足够好.

显式类型转换

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

对于Resharper来说,C++强制转换包含一个功能强制转换是可能的,因为它只在C++中有效.

您在问题中链接的答案解释了功能演员的安全性.在你的情况下int(d)应该相当于static_cast<int>(d).但一般来说,C风格或功能模型是不安全的,因为它们reinterpret_cast在某些情况下可能相当,例如(double*)some_int_ptr.