只是一个问题,为我自己的好奇心。我多次听说,在编写方法时最好使用复制/销毁范例。所以,如果你有这样的方法:编译器是否可以在循环中生成对象的内联方法?
OtherClass MyClass::getObject(){
OtherClass returnedObject;
return returnedObject;
}
据称,编译器将内联基本方法和调用getObject
方法的堆栈上生成的类优化此。我不知道怎么会在一个循环,工作像这样
for(int i=0; i<10; i++){
list.push_back(myClass.getObject());
}
将编译器放OtherClass
10个实例在栈上,因此它可以内联这个方法,避免复制和破坏,将在未优化的代码发生?怎么样这样的代码:
while(!isDone){
list.push_back(myClass.getObject());
//other logic which decides rather or not to set isDone
}
在这种情况下,编译器可能无法知道getObject
多少次会被调用,所以推测它可以预先分配给任何堆栈,所以我的假设是没有内联完成并且每次调用方法我都将支付全部复制费用OtherObject
?
我意识到所有的编译器都不一样,而这取决于编译器相信这个代码是最优的。我只是泛泛而谈,大部分汇编最有可能如何回应?我很好奇这种优化是如何完成的。
认为内联为代码复制+粘贴。如果可以复制/粘贴,则可以内联。编译器是否会在特定情况下做到这一点是另一回事。 – Mysticial
'otherClass returnedObject();'构造什么都不做 - 不会创建任何对象 – sharptooth
@sharptooth - 编辑删除错误,因为这对他的问题并不重要。 –