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

这篇具有很好参考价值的文章主要介绍了C++ Primer 6.3 返回类型和return语句 知识点+练习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++ Primer 6.3 返回类型和return语句 知识点+练习题,c++,开发语言

无返回值函数

用在返回值类型为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++未规定求值顺序,结果可能出错文章来源地址https://www.toymoban.com/news/detail-796358.html

疑问

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

待更新

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

到了这里,关于C++ Primer 6.3 返回类型和return语句 知识点+练习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】shell编程4(break语句、continue、exit、shell的函数、返回值return)

    break语句用于从for、while、until或select循环中退出、停止循环的执行。 语法: n代表嵌套循环的层级,如果指定了n,break将退出n级嵌套循环。 如果没有指定n或n小于 1,则退出状态码为0,否则退出状态码为n。 一句话总结:跳出当前循环 continue语句用于跳过循环体中剩余的命令

    2024年02月04日
    浏览(36)
  • 《C++ Primer》练习6.36-6.38:书写返回数组引用的函数声明

    最近看C++ Primer,看到6.3.3练习,要求书写返回数组引用的函数声明,觉得有必要实践记录一下。 这里先总结返回数组的引用的的函数声明写法(下面的 Type是 数组元素的类型,可以是int、float等,如果要返回指向数组的指针亦同,将下面的 改成 * 即可) 写法1 函数声明 为:

    2024年02月07日
    浏览(28)
  • 《C++ Primer》第14章 重载运算与类型转换(一)

    参考资料: 《C++ Primer》第5版 《C++ Primer 习题集》第5版 重载的运算符是具有 特殊名字的函数 ,其名字有 operator 和要定义的运算符组合而成。和其他函数一样,重载运算符也具有返回类型、参数列表、函数体。 重载运算符函数的 参数数量 和该运算符的 运算对象数量一样多

    2024年01月20日
    浏览(24)
  • C++ Primer 5th 阅读笔记:变量和基本类型

    内建类型 ,如整型,字符型等; 变量 ,为值绑定的一个名字; 表达式和语句 ,操作值。 分支和循环 ,允许我们条件执行和重复执行; 函数 ,定义抽象计算单元。 自定义类型; 标准库。 学习语言的基本知识和标准库。 内建类型; 简要介绍自定义类。 定义了数据的意义

    2024年02月02日
    浏览(43)
  • java基础知识点系列——分支语句(六)

    流程控制语句分类 顺序结构 分支结构 循环结构 顺序结构 顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行。 if语句格式1 执行流程: 首先计算关系表达式的值 如果关系表达式的值为true就执行语句体 如果关系表达式的值为

    2024年02月02日
    浏览(37)
  • MATLAB知识点:if条件判断语句的嵌套

     ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自​第4章:MATLAB程序流程控制 我们通过一个经典例题来理解if的嵌套,所谓if的嵌套,是指在if、els

    2024年04月09日
    浏览(34)
  • C/C++ 知识点:(void*)类型

    void 指针一般被称为 通用指针 。它是C语言关于 纯粹地址 的一种约定。当某个指针是 void 型指针时,所指向的对象不属于任何类型。 void 指针具有下面这些特点,如下: 可以将别的类型的指针无需强制类型转换的赋值给 void * 类型。也可以将 void * 强制类型转换成任何别的指

    2024年01月20日
    浏览(31)
  • MATLAB知识点:triu函数和tril函数--返回矩阵的上三角部分和下三角部分。

     讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。 MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 以下内容节选自第三章3.5节 triu 函数 和 tril函数, 它们用法相同,可分别用来返回矩阵的上三角部分和下三角

    2024年01月25日
    浏览(40)
  • Java面试题:解释Java的基本数据类型及其大小和默认值,列举数据类型常见的错误知识点

    Java的基本数据类型是Java编程语言中用于存储简单值的类型。这些数据类型包括整数类型、浮点类型、字符类型和布尔类型。下面是对这些基本数据类型的详细解释,包括它们的大小和默认值,以及一些常见的面试中容易出错的知识点。 基本数据类型及其大小和默认值 整型

    2024年04月16日
    浏览(32)
  • C++碎知识点

    二叉树 由 n个节点构成的形态不同的⼆叉树 同余符号 定义设m是大于1的正整数,a,b是整数,如果m|(a-b),则称a与b关于模m同余,记作abmod(m),读作a同余于b模m。 符号= 按位与 后赋值 C语言中计算优先级 1LL 1LL会在运算时把后面的临时数据扩容成long long类型,再在赋值给左边时转

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包