只是出于我自己的好奇心的问题。我多次听说在编写方法时最好使用复制/销毁范式。因此,如果您有这样的方法:
OtherClass MyClass::getObject(){
OtherClass returnedObject;
return returnedObject;
}
据推测,编译器将通过基本上内联方法并在调用的方法的堆栈上生成类来优化这一点getObject
。我想知道这将如何在这样的循环中工作
for(int i=0; i<10; i++){
list.push_back(myClass.getObject());
}
编译器是否会在堆栈上放置 10 个实例,OtherClass
以便可以内联此方法并避免在未优化的代码中发生的复制和销毁?像这样的代码呢:
while(!isDone){
list.push_back(myClass.getObject());
//other logic which decides rather or not to set isDone
}
在这种情况下,编译器不可能知道getObject
会被调用多少次,所以可以推测它可以将任何东西预先分配到堆栈中,所以我的假设是没有完成内联,每次调用该方法时我都会支付全部成本抄袭OtherObject
?
我意识到所有编译器都是不同的,这取决于编译器是否认为该代码是最佳的。我只是笼统地说,大多数编译最有可能做出回应?我很好奇这种优化是如何完成的。