【发布时间】:2016-08-17 05:40:35
【问题描述】:
我有这种情况:
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,则强制转换是多余的。
按照标准,由于没有必要,是否会丢弃第二次强制转换(不再有可执行代码)?
【问题讨论】:
-
基于this answer,不清楚你说的
dropped是什么意思。 -
如果删除意味着它不会产生可执行代码,那么是。基于链接到的答案 merlin。
-
怎么样
classB x = a; -
标准没有说明会生成多少条汇编指令。如果你在乎,那就衡量吧。
-
N3690: 5.2.9/4: 如果声明
T t(e);格式正确,则表达式 e 可以使用static_cast<T>(e)形式的 static_cast 显式转换为类型 T,对于一些发明的临时变量 t (8.5)。 这种显式转换的效果与执行声明和初始化,然后使用临时变量作为转换的结果是一样的。当且仅当初始化使用它作为一个glvalue时,表达式e才被用作一个glvalue。 --------- 从这一点来看,这样的static_cast似乎会将我们置于编译器的(优化)怜悯。
标签: c++ c++11 static-cast