Vin*_*ent 5 c++ integer casting compiler-optimization c++11
考虑一个类:
struct mystruct
{
constexpr operator char() {return x;}
signed char x;
};
Run Code Online (Sandbox Code Playgroud)
和一个像这样的操作:
mystruct m;
m.x = /* something at runtime */
int i = 3 * m + 45ULL * m;
Run Code Online (Sandbox Code Playgroud)
编译器是否能够跳过临时转换char并直接转换为表达式中m所需的类型3 * m + 45ULL * m?
看来GCC 5.3.0版本能够优化对cast函数的调用,而Clang 3.7则没有那么智能。
对于这段代码:
struct mystruct
{
constexpr operator char() const {return x;}
signed char x;
} m;
void func(const int num) {
m.x = num*2;
int i = 3 * m + 45ULL * m;
}
Run Code Online (Sandbox Code Playgroud)
您可以检查编译的程序集并比较它们:
尽管在稍微不同的情况下,Clang 确实设法优化了对强制转换函数的调用。