我发现这个样板代码经常出现在我的程序中:
if (ptr) {
ptr->method();
}
我用单线代替了它(就像我看到人们在Java
中做的那样):
ptr && (ptr->method(), true);
从生成的机器代码的角度来看这是一个很好的做法,还是我在我的二进制文件中引入了额外的常量?可能会出现什么问题" port"来自Java
我的计划中的原因?
答案 0 :(得分:1)
从生成机器代码的角度来看,这完全无关紧要。如果这两种形式中的一种更好并且编译器的优化器不能将一种形式转换为另一种形式,则不值得使用“优化器”这一名称。
这就留下了哪个更具可读性的问题。第一个是显而易见的。第二个很容易让一个人超过一分钟来解析。不好。
另请注意,第二种情况可能会在运算符重载的情况下引入不需要的结果。如果operator ,
为method()
返回的类型重载,则会在第二种情况下调用它,而不是在第一种情况下调用。如果operator &&
类型的ptr
重载,则第二种情况将会失败,因为过载的&&
未被延迟评估。但是,这些运营商都是那些非常不鼓励超载的运营商。