例如,当从 void* 转换为 PMY_OBJECT 时,必须执行以下操作:
void MyFunction(void* v) {
PMY_OBJECT p = (PMY_OBJECT) v;
}
Run Code Online (Sandbox Code Playgroud)
在 C 中,您根本不必强制转换,但在 C++ 中,最接近的是:
PMY_OBJECT p = (decltype(p)) v;
Run Code Online (Sandbox Code Playgroud)
为什么不简单:
PMY_OBJECT p = (auto) v;
Run Code Online (Sandbox Code Playgroud)
?
请注意,这一切都是假设性的,因为 C++ 是由一个委员会设计的,该委员会必须考虑许多特殊情况和挑剔。
话虽如此,C++ 明确不鼓励使用这种(type)val语法;static_cast,dynamic_cast和其他显式强制转换是首选,因为这样可以更容易地发现由不正确强制转换引起的错误。
事实上,正如其他答案/评论所提到的,在您的问题的特定情况下(初始化变量),您可以使用auto该变量类型并使用 eg 强制初始化器的类型static_cast,如下所示:
auto p = static_cast<PMY_OBJECT>(v);
Run Code Online (Sandbox Code Playgroud)
这实际上很常见;我已经看到它使用过并且至少使用过几次。但是,请注意不要在不必要的情况下过度使用它,因为您可能最终会否定auto首先带来的许多好处。
通过允许(auto)(这实际上是强制强制转换),您将所有与 C 风格强制转换相关的问题都引入了回去,而获得的便利却很少。
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |