C++ Primer 6.3 返回类型和return语句 知识点+练习题

总思维导图

C++ Primer 6.3 返回类型和return语句

  • 无返回值函数
  • 有返回值的函数
    • 两个错误
    • 值是如何被返回的
    • 返回类类型的函数和调用运算符
    • 引用返回左值
    • 列表初始化返回值
    • 主函数main的返回值
    • 返回数组指针
  • 递归
  • 练习题
  • 疑问
  • 待更新

无返回值函数

用在返回值类型为void的函数中,可以不写return,因为此类函数会在最后一句隐式执行return;
可以自己写return;在函数里类似于break,直接退出

void swap(int &v1,int &v2)
{if(v1==v2)return;//直接退出函数int tmp=v1;v1=v2;v2=tmp;
}

除return;还可以return func();此时func为返回值为void的函数

void func2()
{.....return swap();//!!!有疑问,不是无法返回函数吗,后续章节函数指针P223,难道是特例
}

有返回值的函数

两个错误

bool str_subrange(const string &str1,const string &str2)
{auto size=(str1.size()<str2.size())? str1.size():str2.size();for(decltype(size) i=0;i!=size;++i)if(str1[i]!=str2[i])return;//错误1,无返回值//错误2,for循环结束后应加上一个返回值,程序可能执行到这里再返回
}

值是如何被返回的

先拷贝再传值
不要返回局部对象的引用或指针:函数完成后,它所占用的存储空间也被释放,若返回的是局部变量则会出现问题

返回类类型的函数和调用运算符

auto sz=shorterString(s1,s2).size();//用返回的string类类型用.调用size()成员函数

引用返回左值

可把函数返回值作为可赋值的对象(左值)
返回引用可得到左值

char & get_val(string &str,string::size_type ix)
{return str[ix];
}
int main()
{...get_val(s,0)='A';//s是string类型
}

列表初始化返回值

c++11新标准函数可以返回花括号包围的值列表,同P39知识对应,有时间整理
leetcode 二分查找第一个和最后一个出现的值用过这种返回方式

vector<string> process()
{if(str1.empty())return{};else if(str1==str2)return{"functionx","okay"};else return{"functionx".str1,str2};
}

若返回的是内置类型,则{}只包含一个值,且不可超过内置类型的空间,当作赋初始值来看就好

int a={3.14};
不会转换,会报错,有丢失风险就会报错

主函数main的返回值

允许main没有return直接结束,会隐式插入return 0;语句
main的返回值可看为状态指示器,0代表成功,非0代表失败(具体值依据机器)
可以定义预处理变量分别表示成功或失败(P69有头文件预处理,解决重复包含问题)
EXIT_FAILURE失败 EXIT_SUCCESS成功,需要有cstdlib头文件

返回数组指针

数组不能被拷贝,不能返回数组,但可以返回数组指针或引用
可用方法

  1. 使用类型别名
typedef int arr[10]; arr是大小为10的整型数组的别名
using arr=int [10];
arr* func(int i);返回值是数组指针
  1. 直接声明返回
int (*func(int i))[10];返回值是数组指针 
int *func(int i);返回的是数组中具体某个元素看下面更好理解
int arr[10];
int *p1[10];指针数组
int (*p2)[10];数组指针

数组的维度必须在函数名字之后,函数的形参列表也在后面且形参列表应先于数组维度
3. 使用尾置返回类型
c++11新标准,形参后面加->真正的类型,本应是返回值的地方放一个autoauto func(int i)->int(*) [10]
4. 使用decltypedecltype(odd) * arrptr(int i)odd为数组,因为decltype不会将数组转为指针,所以要加上*

递归

递归:函数调用自身,一定要有一个退出递归的条件(递归出口)

递归实现阶乘
int f(int val)
{if(val>1)return f(val-1)*val;return1;
}

练习题

6.34 若输入-5会出错
6.35 若改为val–,又有递减又有取值,c++未规定求值顺序,结果可能出错

疑问

  1. return swap();//!!!有疑问,不是无法返回函数吗,后续章节函数指针P223,难道是特例

待更新

  1. P39初始化列表
  2. P69头文件预处理,解决重复包含问题
  3. int arr[10]; arr &arr

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依基于jsencrypt实现前后端登录密码加密

若依虽然有加密解密功能&#xff0c;然后只有前端有&#xff0c;在用户点击保存密码的时候&#xff0c;会将密码保存到本地&#xff0c;但是为了防止密码泄露&#xff0c;所以在保存的时候&#xff0c;进行加密&#xff0c;在回显密码的时候进行解密显示&#xff0c;用户在登录…

29 旋转工具箱

效果演示 实现了一个菜单按钮的动画效果&#xff0c;当鼠标悬停在菜单按钮上时&#xff0c;菜单按钮会旋转315度&#xff0c;菜单按钮旋转的同时&#xff0c;菜单按钮旋转的8个小圆圈也会依次旋转360度&#xff0c;并且每个小圆圈的旋转方向和菜单按钮的旋转方向相反&#xff0…

数据结构期末复习(4)串 树和二叉树

串 在数据结构中&#xff0c;串是由零个或多个字符组成的有限序列。它是一种线性数据结构&#xff0c;常用于表示和处理文本、字符串等信息。 串的特点包括&#xff1a; 顺序性&#xff1a;串中的字符按照一定的先后顺序排列&#xff0c;每个字符都有一个唯一的位置。有限性&…

MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器

系列文章目录 前言 本示例展示了如何利用非线性模型预测控制&#xff08;MPC&#xff09;为四旋翼飞行器设计一个跟踪轨迹的控制器。 一、四旋翼模型 四旋翼飞行器有四个向上的旋翼。从四旋翼飞行器的质量中心出发&#xff0c;旋翼呈等距离的正方形排列。四旋翼飞行器动力学数…

uboot工作原理介绍

uboot其实和电脑的BIOS是一个原理&#xff0c;它主要做两件事: &#xff08;1&#xff09;初始化硬件&#xff1b; &#xff08;2&#xff09;将系统文件&#xff08;或者说是内核&#xff09;从flash中读出来加载到DDR里面执行。 给大家解释下面几个问题&#xff1a; 为什么…

zabbix6.4设置网络设备端口流量P95

P95概念&#xff1a; p95函数写法&#xff1a; 需要监控P95的设备如下&#xff1a; 先找到原来的端口接收发送速率的监控项&#xff1a; 可以看到他们归属于自动发现规则&#xff1a;端口表UP 找到自动发现规则&#xff1a; 点击创建监控项原型&#xff1a; 公式如下&#xff…

吴恩达-从人类反馈中进行强化学习RLHF

吴恩达-从人类反馈中进行强化学习RLHF https://www.bilibili.com/video/BV1R94y1P7QX?p1&vd_sourcee7939b5cb7bc219a05ee9941cd297ade 1、公开的LLM&#xff0c;Llama2&#xff0c; 使用LLM对同一个提示产生多个不同输出&#xff0c;然后人类评估这些输出。评估方法是对比…

数据结构【树+二叉树】

目录 线性表和非线性表 树的概念 树的存储表示 二叉树的概念 特殊二叉树 满二叉树 完全二叉树 二叉树的性质 二叉树的存储结构 顺序存储 链式存储 本篇我们开始进入数据结构中【树】的学习。 线性表和非线性表 逻辑结构&#xff1a;人想象出来的物理结构&#xf…

【昕宝爸爸小模块】浅谈之创建线程的几种方式

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

JVM实战(14)——Young GC调优

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

C++学习笔记——用C++实现树(区别于C)

树是一种非常重要的数据结构&#xff0c;它在计算机科学中的应用非常广泛。在本篇博客中&#xff0c;我们将介绍树的基本概念和C中如何实现树。 目录 一、树的基本概念 2.C中实现树 2.1创建一个树的实例&#xff0c;并向其添加节点 2.2三种遍历方式的实现代码 3.与C语言相…

B端产品经理学习-版本规划管理

首先我们回顾一下用户故事&#xff0c;用户故事有如下特点&#xff1a; PRD文档的特点则如下&#xff1a; B端产品中用户角色不同&#xff0c;需求侧重也不同 决策人——公司战略需求&#xff1a;转型升级、降本增效、品牌提升等 管理负责人——公司管理需求&#xff1a;提升…

翼龙-2H无人机

一、概述 翼龙-2&#xff0c;是成都飞机工业集团研制的无人驾驶飞行器&#xff0c;是空中侦察、精确打击和应急通讯的平台。成都飞机工业集团于2015年9月的北京国际航空航天展览会上介绍了翼龙-2的概念。在2016年珠海航展期间&#xff0c;翼龙-2的原型机首次向公众展示。 因为…

c#异形窗体遮罩效果

c#异形窗体遮罩效果&#xff0c;移动&#xff0c;关闭&#xff0c;最大化&#xff0c;最小化&#xff0c;还原操作 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D…

构建Python随机密码生成器:保障账户安全的简易工具

密码安全是当前数字时代的一个重要议题。在保护个人信息和账户安全方面&#xff0c;安全且可靠的密码是至关重要的。本文将带您逐步了解如何使用Python创建一个随机密码生成器&#xff0c;以生成高强度、难以猜测的密码。 导言 在网络环境中&#xff0c;密码是保护个人账户和…

Linux网络文件共享服务1(基于FTP文件传输协议)

目录 一、了解FTP 1、FTP的相关概念 2、FTP的两种模式及工作原理 2.1 主动模式 2.2 被动模式 3、vsftpd 软件介绍 3.1 基础操作 4、vsftpd服务常见配置 4.1 修改默认命令端口 4.2 主动模式端口 4.3 被动模式端口 4.4 使用当地时间 4.5 匿名用户登录 4.6 匿名用户上…

c语言-库函数strstr()、strtok()、strerror()介绍

文章目录 前言一、库函数strstr()1.1 strstr()介绍1.2 strstr()模拟实现 二、库函数strtok()2.1 strtok()介绍 三、库函数strerror()3.1 strerror()介绍 总结 前言 本篇文章介绍c语言库函数strstr()、strtok()、strerror()的使用。 一、库函数strstr() 1.1 strstr()介绍 str…

基于ssm的线上旅游体验系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

Hive导入数据的五种方法

在Hive中建表成功之后&#xff0c;就会在HDFS上创建一个与之对应的文件夹&#xff0c;且文件夹名字就是表名&#xff1b; 文件夹父路径是由参数hive.metastore.warehouse.dir控制&#xff0c;默认值是/user/hive/warehouse&#xff1b; 也可以在建表的时候使用location语句指定…

x-cmd pkg | duf - df 命令的现代化替代品

目录 简介用户首次快速实验指南技术特点竞品和相关作品进一步探索 简介 Duf &#xff08;Disk Usage/Free Utility&#xff09;是一个磁盘分析工具。其直观的输出和多样化的自定义选项&#xff0c;帮助用户更好地管理和优化存储资源。 用户首次快速实验指南 使用 x duf 即可自…