铸造成相同的类型

Hum*_*awi 8 c++ static-cast c++11

我有这个案子:

using T = classA; //T could be classA and could be `classB` in other platforms.
T a;
auto x = static_cast<classB>(a);
Run Code Online (Sandbox Code Playgroud)

如果T classA是必须的铸件.在T的情况下,classB铸造是多余的.

按标准,是否会丢弃第二个铸件(不再有可执行代码),因为没有必要?

R S*_*ahu 3

来自 C++11 标准:

5.2.9 静态投射

1 表达式的结果是将表达式转换为 typestatic_cast<T>(v)的结果。vT

当 的类型v与 相同时,如果不是类,T则转换很简单。T一个好的编译器不应该static_cast.

  • 我认为这是错误的,`static_cast`应该调用复制构造函数。[示例](https://godbolt.org/g/ni7n55)。请参阅 5.2.9/4(在 C++14 中) (7认同)
  • @RSahu http://ideone.com/PLt54x - 由于删除了“static_cast”的复制构造函数而无法编译。 (2认同)