for (size_t i = 0; i < myClassObject.Method(); ++i)
some work;
我想知道如果编译器将优化出来的方法调用,并把它变成这样?
size_t result = myClassObject.Method();
for (size_t i = 0; i < result; ++i
some work;
如果它是一个函数调用,它会影响吗?我担心的是,我可能会对该方法进行1000次不需要的调用,但我更愿意在条件中使用方法调用编写它。
类似的问题在这里http://stackoverflow.com/questions/5607762/what-does-code-motion-mean-for-loop-invariant-code-motion – srikanta
无所谓如果它是一个方法调用或纯C风格的函数调用中,允许编译器优化它的要求是相同的。 – Mat
这是受广泛实施的环路提升优化,又称“环路不变代码运动”。所以,是的。 http://en.wikipedia.org/wiki/Loop-invariant_code_motion –