C++函数传参方式
2021-04-25
2 min read
C++函数传参方式
引言
C++函数传参方式有很多种选择,可以传值、传指针、传引用、返回值等,故需要一种内部规范让函数参数传递简明易懂,同时兼顾性能;
代码示例
以下代码使用了结构化绑定,需要编译器支持C++17;
#include <tuple>
class CDemo1 {
// ...
};
class CDemo2 {
// ..
};
// 函数传参方式示例
std::tuple<double, std::string> testFunc(const int n,
const std::vector<double>& x,
CDemo1& out1,
CDemo2* out2 = nullptr)
{
// do something
}
int main()
{
const int n = 10;
const std::vector<double> x = {1.1, 2.2, 3.3};
CDemo1 d1;
CDemo2 d2;
auto [y, errInfo] = testFunc(n, x, d1, &d2);
// ...
return 0;
}
结论
通过上述代码示例,可总结函数传参中传值、传引用、传指针、函数返回值的的 最佳实践:
函数入参
POD类型使用常值(如 const double x);
类类型使用常引用(如 const T& x);
函数出参
若有可能,优先使用函数返回值,尽量不要使用函数出参,以增强可读性;
若需要使用出参,优先使用 T& ;
在出参中,若可能为空(如 有默认参数 = nullptr)或者其指向可能变化,才使用 T* ;
函数返回值
若是新产生的变量,则返回 单个/多个 值(类类型同样可以返回值,只要保证返回值优化发生,则性能与出参是一样的);
若是修改函数体之外的变量,可返回比本函数生命周期更长变量的引用/指针;
版权声明:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!