【发布时间】:2018-11-02 10:38:30
【问题描述】:
我想知道gcc编译器是否优化了以下方法调用。
bool methodY()
{
..some operations..
return true;
}
int methodX() {
if(methodY() == true)
return methodY();
..some operations..
}
在methodX内部,编译器会优化对methodY的调用两次还是任其发展?
【问题讨论】:
-
为什么这个标签是C? (另一方面:
== true是多余的、重复的和多余的。) -
对
bool result=methodY(); if result, return result不是更“简单”更“优化”吗? -
@M.K 或者只是
if (methodY()) return true;如果变量在使用时总是具有相同的值,则无需存储它。 -
为什么不简单地看一下生成的程序集呢?为什么不写一些更详细的代码呢?如果确实需要调用两次,则执行,否则不执行。如果不是,为什么要编写这样的代码?任何人类读者都会在这里挣扎!
-
你为什么想知道?编译器生成的输出表现得好像它会完全按照您告诉它做的那样做。如果
methodX有副作用,你不必担心它们执行的次数太少。如果不是,您仍然不必太在意优化,但更好地关心编写可读代码
标签: c++ c++11 compiler-optimization