这很快:通过函数返回值或将值保存在参数/参数中
which is fast : returning a value by function OR saving the value in arguments/parameters
>有人请告诉我以下哪一个更快,为什么?
int add(int a, int b){
return a+b;
}
或
void add(int a, int *b){
*b = a+(*b);
}
函数可能是内联的,并且两者都会产生相同的生成代码。
您不应该试图通过查看代码来猜测哪个更快,而应该分析正在考虑的选项,以查看其中一个是否比另一个更快,以及它是否真的有所不同。现在关于你的例子,我认为按值返回根本没有问题,因为现在大多数编译器都执行返回值和命名返回值优化,这是复制省略的形式。最重要的是,C++11引入了移动语义,这意味着在适用的情况下,数据从临时数据"移动"到目标。因此,实际上,按值返回可能会更快,因为您不必检查输入。
有关按值传递的相关讨论,请参阅此处,有关相关问题,请参阅此处。
返回值不太可能比保存值慢,因为值通常在寄存器中返回(如果 CPU 有一个累加器并且返回值适合),则通常是累加器)。
相关文章:
- 是否可以保存带有参数的函数指针以供以后使用?
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 无法绑定可变参数函数并保存到 std::函数
- GoogleMock:如何保存参数,以便在模拟上的下一次调用中使用
- put_money是否按值或引用保存其参数
- 如何定义可以保存可变参数模板参数的类
- 在参数包中获取函数指针的返回类型,并将其保存为与其他参数连接的元组
- 是否可以在数组中保存具有不同参数的成员函数?
- 一个用于保存模板专业参数的结构
- boost::绑定在存储时不保存部分参数
- 定义变量以保存内部参数
- 这很快:通过函数返回值或将值保存在参数/参数中
- 常量参数与右值参数传递,当内部保存到类私有变量时
- 保存命令行参数并对其进行类型转换
- C++函数通过strlen()运行'string'类型参数,将新值保存到虚拟类实例,将虚拟类传递给新函数。为什么?
- 如何使用可变模板参数保存可变数量的参数
- C++谷歌模拟SaveArg:如何保存指针参数
- 在内部结构的定义中使用保存函数的类成员变量,这些内部结构将用作unordered_map对象的模板参数
- 如何使void*参数在函数中保存其局部结果,该函数使用struct *调用
- 具有指针参数的类函数未保存到向量