【发布时间】:2011-09-01 18:23:32
【问题描述】:
一些计算布尔值的函数:
bool a()
{
return trueorfalse;
}
bool b()
{
//...
}
bool c()
{
//...
}
这个条件
//somewhere else
if((a()&&b()&&c()) || (a()&&b()&&!c()) )
{
doSomething();
}
也可以写成
if(a()&&b())
{
doSomething();
}
编译器通常会对此进行优化吗?
那么纯布尔值呢:
if((a&&b&&c) || (a&&b&&!c))
{
doSomething();
}
【问题讨论】:
-
可以写成只知道函数是pure functions。
-
我不这么认为,除非它可以证明 c 每次调用都返回相同的结果,并且它可能还必须尝试内联 c。
-
bool c() { static bool r=true; r = !r; return r;}例如。 -
如果你使用变量而不是函数调用,那么,是的,编译器会优化。
-
我认为值得尝试简化它。如果它那么复杂,您如何期望您的代码的读者(包括您自己)以后能够理解它?也许还尝试将条件提取到单独的函数中?
标签: c++ c compiler-optimization