RVO(返回值优化)是否保证适用于C++编译器(特别是GCC)中的所有对象和情境?
如果答案是"否",那么对类/对象进行优化的条件是什么?如何强制或鼓励编译器对特定的返回值执行RVO?
让我说我有功能
std::Vector<Point> calculate() {
std::Vector<Point> points; //do stuff with points
return points;
}
Run Code Online (Sandbox Code Playgroud)
和
void calculate(std::Vector<Point>& points) {
//do stuff with points
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是特定于在堆栈上初始化的对象,并且是stl对象.性能有什么不同,这种流行的方法是什么
问候
有人请告诉我以下哪一项更快,为什么?
int add(int a, int b){
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
要么
void add(int a, int *b){
*b = a+(*b);
}
Run Code Online (Sandbox Code Playgroud) 我是C++的新手,我知道有三种返回局部变量的方法,并且都有它们的缺点:
Person& getPerson()
{
Person bob;
return bob;
}
Run Code Online (Sandbox Code Playgroud)
显然不是一个好主意.
Person getPerson()
{
Person bob;
return bob;
}
Run Code Online (Sandbox Code Playgroud)
没有空指针或悬空引用的可能性,但性能命中.
Person* getPerson()
{
return new Person();
}
Run Code Online (Sandbox Code Playgroud)
没有空指针的可能性,但肯定这违反了OO设计的基本规则.另一个对象将不得不删除 - 但为什么要这样做?getPerson()方法的实现与它无关.
所以,我正在寻找替代方案.我听说过共享指针和智能指针(标准和Boost),但我不确定它们中是否有任何一个用于处理这个问题.你们有什么建议?