通过递归加深引用传递和常引用传递的区别,同时加深递归回溯的过程

void process(string& str) {if (str.size() >= 5) {cout << str << ",return" << endl;return;}cout << str<<endl;str += '1';process(str);cout << str << endl;
}
int main() {string str = "";process(str);cout << "final,"<< str << endl;while (1);return 0;
}

1
11
111
1111
11111,return
11111
11111
11111
11111
11111
final,11111

该函数在递归中每一次都修改str的值,注意传递的是引用传递,所以每一次对str的修改都会改变str中真实的值,所以在递归调用回溯过程中输出str最后都是11111;

void process(const string& str) {if (str.size() >= 5) {cout << str << ",return" << endl;return;}cout << str<<endl;process(str+'1');cout << str << endl;
}
int main() {string str = "";process(str);cout << "final,"<< str << endl;while (1);return 0;
}

1
11
111
1111
11111,return
1111
111
11
1final,

传递的是引用常量参数,所以在不会修改原str的值,并且在回缩过程中每个临时变量的str都不一样。

递归中的引用传递和常引用传递相关推荐

  1. c++引用专题之常引用

    引用专题之常引用 常引用 使用变量初始化const引用 案例1 案例2 使用字面量常量初始化const引用 综合案例 const引用结论 综合练习 常引用 下面开始进入const引用难点 使用变量初始 ...

  2. 【C++要笑着学】引用的概念 | 引用的应用 | 引用的探讨 | 常引用

      ​​​​​​

  3. C++左值和右值,左值引用和右值引用

    左值和右值 C++ 中对于左值和右值没有一个标准的定义,通常来说: 可以取得到地址的,有变量名称的,非临时的量就是左值,从硬件结构上看,存储在内存中的量就是左值: 无法取得到地址的,没有变量名称的,临 ...

  4. C++中在什么时候需要使用“常引用”?

    如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用. 常引用声明方式:const 类型标识符 &引用名=目标变量名: 例1 int a ;const in ...

  5. C++中的常对象与常引用

    目录 一.常对象 二.用const修饰的类对象 1.常成员函数 声明 注意 三.常引用 1.声明 2.应该在何时使用: 1.在函数中无需改变其值的参数,应该使用常引用. 2.复制构造函数的参数一般也宜 ...

  6. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  7. C++中的常引用、常对象、常函数、常数据成员

    1.常引用 用const声明的引用就是常引用.常引用所引用的对象不能被更改.经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改.常引用的声明形式为:const 类型说明符 &引用名. ...

  8. Java中ListE对象赋值问题(引用传递和值传递)

    Java中List<E>对象赋值操作问题 业务需求是:取2个集合中的交集对象并返回.如下代码,busMap中key值和stocks中Map中的key值相等的对象则返回继续操作,也就是说剔除 ...

  9. python引用传递产生的问题_理解Python中传递值和引用时出现问题

    我可以看到三个基本的Python概念,它们可以为这个问题提供一些启示: 1)首先,来自可变对象的赋值,如self.foo = arg1 就像复制指针(而不是所指向的值):self.foo和{}是相同的 ...

最新文章

  1. 浅谈分布式消息技术 Kafka--大数据技术栈05
  2. Python中基础数据类型(List、Tuple、Dict)的概念和用法
  3. java 字母随机数_java如何生成指定长度的随机数字和英文的字符串
  4. 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)
  5. 如何注册和删除系统服务文件
  6. 安装配置管理 之 JRE 安装和配置,以适合JAVA程序运行所具备的环境
  7. 2 测试方法与理论 - 软件测试
  8. JavaSE,JavaEE,JavaME区别
  9. OSAL工作机制分析
  10. 可以直接复制的emoji符号(表情)
  11. sql server 2005 32位+64位、企业版+标准版、CD+DVD 下载地址大全【申明:来源于网络】
  12. java自动机字符串匹配_字符串匹配之有限自动机
  13. 通过路由器端口映射实现外网IP访问内网服务器
  14. 牛顿迭代法 解 二元高次方程组 Mathematica
  15. word中生成带方块的对勾
  16. 支付宝门店码,全面助力商家快速实现数字化经营
  17. Linux下修改环境变量
  18. uni-app 获取移动设备的MAC地址
  19. 原码、反码、补码和真值
  20. 双摄像头测距的OpenCV实现

热门文章

  1. C和C++中的struct
  2. loghouse介绍
  3. 到Visual Studio Code en 2020中的实际实现
  4. MySQL数据库特点
  5. TERMIOS详解【转】
  6. HTML,css和JavaScript的基础学习—JavaScript篇
  7. EXCEL打开文件显示“文件已损坏,无法打开。”
  8. 负载均衡有哪些常见策略?
  9. PHP训练聊天机器人,智能聊天机器人,陪你聊天练口才!
  10. pikachu RCE