我有这个案子:
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
,则铸造是多余的。
按照标准,第二次投射是否会被删除(不再有可执行代码),因为没有必要?
答案 0 :(得分:3)
来自C ++ 11标准:
5.2.9静态投射
1表达式
static_cast<T>(v)
的结果是将表达式v
转换为T
类型的结果。
当v
的类型与T
相同时,如果T
不是类,则转换很简单。一个不错的编译器不应为static_cast
的这种用法生成任何可执行代码。