铸造成相同的类型

时间:2016-08-17 05:40:35

标签: c++ c++11 static-cast

我有这个案子:

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

如果T为classA,则必须进行投射。如果T为classB,则铸造是多余的。

按照标准,第二次投射是否会被删除(不再有可执行代码),因为没有必要?

1 个答案:

答案 0 :(得分:3)

来自C ++ 11标准:

  

5.2.9静态投射

     

1表达式static_cast<T>(v)的结果是将表达式v转换为T类型的结果。

v的类型与T相同时,如果T不是类,则转换很简单。一个不错的编译器不应static_cast的这种用法生成任何可执行代码。