我应该使用按值调用还是按引用调用?

简介: 我应该使用按值调用还是按引用调用?

这取决于您要实现的目标:

  • 如果要更改传递的对象,请通过引用调用或使用指针; 例如 void f(X&); 或void f(X*);
  • 如果你不想更改传递的对象并且它很大,则通过 const 引用调用; 例如 void f(const X&);
  • 否则,按值调用; 例如void f(X);  

“大”是什么意思? 任何大于几个字的东西。  

我为什么要改变一个参数? 好吧,我们通常不得不这样做,但通常我们有另一种选择:产生新的值。 考虑:  

void incr1(int& x);    // 自增

   int incr2(int x);    // 自增


   int v = 2;

   incr1(v);    // v becomes 3

   v = incr2(v);    // v becomes 4

我认为对于读者来说,incr2() 更容易理解。 即incr1()更容易导致错误和错误。 所以,我更喜欢返回一个新的值而不是修改原来的值,只要新创建的值的创造和复制并不昂贵。

我确实想更改参数,我应该使用指针还是应该使用引用? 我不知道一个强有力的逻辑原因。 如果传递“不是一个对象”(例如空指针)是可以接受的,那么使用指针是有意义的。 当我想修改一个对象时,我的个人风格是使用指针,因为在某些情况下,这样更容易发现修改是可能的。

另请注意,成员函数的调用本质上是对对象的按引用调用,因此当我们想要修改对象的值/状态时,我们经常使用成员函数。

 

相关文章
|
6天前
函数参数传递_使用引用避免拷贝
函数参数传递_使用引用避免拷贝
16 0
|
6天前
|
编译器 C++
C++ 解引用与函数基础:内存地址、调用方法及声明
C++ 中的解引用允许通过指针访问变量值。使用 `*` 运算符可解引用指针并修改原始变量。注意确保指针有效且不为空,以防止程序崩溃。函数是封装代码的单元,用于执行特定任务。理解函数的声明、定义、参数和返回值是关键。函数重载允许同一名称但不同参数列表的函数存在。关注公众号 `Let us Coding` 获取更多内容。
138 1
|
5月前
传值调用与传址调用
传值调用与传址调用
50 0
|
8月前
|
C++
c++引用作为函数参数和函数返回值
c++引用作为函数参数和函数返回值
43 0
|
9月前
|
Java
Java方法的重载、可变个数形参、方法参数的值传递机制
Java方法的重载、可变个数形参、方法参数的值传递机制
68 0
函数参数的声明及调用
函数参数的声明及调用
123 0
函数参数的声明及调用
引用调用
引用调用
95 0
|
C语言 C++
C++ 构造函数+析构函数+函数参数的传递
C++ 构造函数+析构函数+函数参数的传递
104 0
C++ 构造函数+析构函数+函数参数的传递
|
编译器 C++
C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨
C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨
234 0
|
C语言 Android开发 C++
【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
173 0