相关疑难解决方法(0)

RVO(返回值优化)是否适用于所有对象?

RVO(返回值优化)是否保证适用于C++编译器(特别是GCC)中的所有对象和情境?

如果答案是"否",那么对类/对象进行优化的条件是什么?如何强制或鼓励编译器对特定的返回值执行RVO?

c++ optimization gcc

47
推荐指数
2
解决办法
1万
查看次数

stl数据结构的堆栈输出参数与返回值的效率

让我说我有功能

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对象.性能有什么不同,这种流行的方法是什么

问候

c++ performance stl c++11

7
推荐指数
2
解决办法
2027
查看次数

这很快:按函数返回值或保存参数/参数中的值

有人请告诉我以下哪一项更快,为什么?

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 c++ function

1
推荐指数
1
解决办法
149
查看次数

在C++中返回局部变量的引用和标准指针有哪些替代方法?

我是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),但我不确定它们中是否有任何一个用于处理这个问题.你们有什么建议?

c++ boost pointers reference smart-pointers

0
推荐指数
1
解决办法
145
查看次数

标签 统计

c++ ×4

boost ×1

c ×1

c++11 ×1

function ×1

gcc ×1

optimization ×1

performance ×1

pointers ×1

reference ×1

smart-pointers ×1

stl ×1