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

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

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

  • 如果要更改传递的对象,请通过引用调用或使用指针; 例如 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()更容易导致错误和错误。 所以,我更喜欢返回一个新的值而不是修改原来的值,只要新创建的值的创造和复制并不昂贵。

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

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

 

相关文章
|
C++
【PTA】​L1-006 连续因子​(C++)
【PTA】​L1-006 连续因子​(C++)
449 0
【PTA】​L1-006 连续因子​(C++)
|
消息中间件 Java Kafka
将CSV的数据发送到kafka(java版)
java版,读取CSV数据发送到kafka
200 1
将CSV的数据发送到kafka(java版)
|
机器学习/深度学习 人工智能 算法
【解锁AI新纪元】深度剖析元学习meta-learning:超越监督学习的智慧飞跃,掌握学习之学习的奥秘!
【8月更文挑战第2天】【元学习meta-learning】通俗易懂讲解:解锁学习之学习的奥秘与监督学习之别
245 24
|
监控 网络安全 数据库
第一章 专用工具和实用程序概述
第一章 专用工具和实用程序概述
91 1
|
机器学习/深度学习 监控 自动驾驶
深度学习在图像识别中的应用
本文将探讨深度学习技术在图像识别领域的应用,包括其原理、优势以及实际应用案例。我们将通过具体实例和数据,深入了解深度学习如何改变图像识别领域,并引发读者对于未来发展趋势的思考。
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的外籍人员管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的外籍人员管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
Java
JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)
JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)
122 0
|
机器学习/深度学习 PyTorch API
PyTorch-PaddlePaddle模型转化&API映射关系对照表
PyTorch-PaddlePaddle模型转化&API映射关系对照表
609 0
PyTorch-PaddlePaddle模型转化&API映射关系对照表
|
前端开发
栈和队列详解
栈和队列详解
|
Web App开发 自然语言处理 JavaScript
浏览器工作原理
本文从多个维度详细分析浏览器的核心工作原理。我们将讨论`导航`、`获取数据`、`解析`和`渲染`等核心步骤,并希望能使你对这些概念更清晰
457 1