【c++ primer, 5e】返回类型和return语句
【无返回值函数】
1、在c++的void函数中,可以显式地使用return;语句来提前结束函数的调用。
【有返回值函数】
1、值是如何被返回的:返回一个值的方式和初始化一个变量或者形参的方式完全一样。
2、不要返回局部对象的引用或指针。
3、返回类类型的函数和调用运算符:调用运算符的优先级和点运算符、箭头运算符相同,且满足左结合律。
4、引用返回左值!其他返回类型得到右值,具体而言:
char &get_val(string &str, string::size_type ix)
{
return str[ix];
}
虽然看上去有点奇怪,但却是合法的:
get_val(s, ) = 'A';
5、列表初始化返回值。例子:
vector<string> f()
{
// codes
return {s1, s2, s3, ...};
}
(可以和可变参数的函数配合使用。)
6、主函数main的返回值。
返回0表示执行成功,返回非0表示执行失败,在cstdlib中定义了两个预处理变量表示成功和失败。
7、递归。没什么好说的,记住:一定有某一条路径是不包含递归调用的!
6.30
#include <string>
using namespace std;
bool str_subrange(const string &str1, const string &str2)
{
if (str1.size() == str2.size())
return str1 == str2;
auto size = (str1.size() < str2.size())
? str1.size() : str2.size();
for (decltype(size) i = ; i != size; ++i) {
if (str1[i] != str2[i])
return;
}
}
prog1.cpp: In function 'bool str_subrange(const string&, const string&)':
prog1.cpp::: error: return-statement with no value, in function returning 'bool' [-fpermissive]
return;
如果补上合适的返回值编译器不报错,证明编译器没有检查出“在循环后面漏了一个return”这个错误!同时也证明了源代码能通过编译器,并不等同于程序没有问题,就算程序能正确运行,也可能存在一些没有暴露出来的问题。
6.31
当引用局部对象、局部常量的时候,返回的引用、常量引用无效。
6.32
从运行结果来看是合法的,功能略。
#include <iostream>
using namespace std;
int &get(int *arry, int index)
{
return arry[index];
}
int main()
{
int ia[];
for (int i = ; i != ; ++i) {
get(ia, i) = i;
}
for (auto x : ia) {
cout << x << endl;
}
return ;
}
6.3
#include <iostream>
#include <vector>
using namespace std;
void vectorPrinter(vector<int>::iterator beg, vector<int>::iterator end)
{
if (beg != end) {
cout << *beg << endl;
vectorPrinter(beg+, end);
return;
} else
return;
}
int main()
{
vector<int> ivec = {, , , , };
vectorPrinter(begin(ivec), end(ivec));
return ;
}
6.34
结果是不会错,但是会多做一次乘法运算。
6.35
逻辑上有错,--val倒是可以试一下,但是这样的话势必会影响乘号右侧运算对象的值,没有正确结果。
【返回数组指针】
这一小节看不懂。
1、使用类型别名。
using arrT = int[];
arrT* func()
2、使用尾置返回类型。
auto func(int i) -> int(*)[]
3、使用decltype。
【c++ primer, 5e】返回类型和return语句的更多相关文章
- 函数----基础,参数传递,返回类型和return语句
一.函数基础1.形参和实参 实参是形参的初始值.第一个实参初始化第一个形参,第二个实参初始化第二个形参,以此类推.尽管实参与形参存在对应关系,但是并没有规定实参的求值顺序.编译器能以任意可行的顺序对实 ...
- 返回类型和return语句
return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return语句有两种形式: return; return expression; 无返回值函数 没有返回值的return语句只 ...
- 返回类型和 return 语句
return 语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return 语句有两种形式: return; return expression; 不要返回局部对象的引用或指针: 函数完成 ...
- 关于类中的参数类型和return返回值
基础有些忘了,现在重新巩固一下 先定义一个Person类 class Person(): def __init__(self,name,age,height): self.name=name, sel ...
- 【c++ primer, 5e】类的其他特性(卒)
1 - Class Members Revisited 2 - Functions That Return *this 3 - Class Types 4 - Friendship Revisited ...
- try {}里有一个return语句 finally执行顺序
先看例子 package example; class Demo{ public static void main(String args[]) { int x=1; System.out.print ...
- GO学习笔记 - 没有参数的 return 语句返回各个返回变量的当前值,这种用法被称作“裸”返回。
Go 的返回值可以被命名,并且就像在函数体开头声明的变量那样使用. 返回值的名称应当具有一定的意义,可以作为文档使用. 没有参数的 return 语句返回各个返回变量的当前值.这种用法被称作“裸”返回 ...
- Python return语句 函数返回值
return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...
- java try中包含return语句,finally中的return语句返回顺序
//结论: finally 中的代码比 return 和 break 语句后执行 public static void main(String[] args) { int x=new Test.tes ...
随机推荐
- JSP内置对象——out,get与post
JSP内置对象是Web容器创建的一组对象,不使用new关键字就可以的内置对象.JSP九大内置对象:out,request,response,session,application,page,pageC ...
- php文件
php文件系统函数: http://www.w3school.com.cn/php/php_ref_filesystem.asp
- 全链路追踪spring-cloud-sleuth-zipkin
微服务架构下 多个服务之间相互调用,在解决问题的时候,请求链路的追踪是十分有必要的,鉴于项目中采用的spring cloud架构,所以为了方便使用,便于接入等 项目中采用了spring cloud s ...
- 堪称神器的Windows软件推荐
更多软件使用技巧.破解软件以及硬件选购知识,欢迎加入我的QQ群(701974765)与我们交流!! 先贴上软件列表,详细描述后期更新,可自行百度 TrafficMonitor CPU.内存.网速资源监 ...
- 160308、java排序(形如1.1、1.2.1)
package com.rick.sample; import java.util.ArrayList; import java.util.Collections; import java.uti ...
- java nio探险
区别于io: nio是基于通道和缓冲区的,io是基于字节流和字符流的,(千万别被这些破名词唬住).以读取文件为例,文件就是自来水厂,通道就是自来水管道,缓冲区就是你家的缸(或者盛水的xx容器,例如你的 ...
- Unable to locate parent package [json-default]
Unable to load configuration. - [unknown location] Caused by: Unable to locate parent package [json- ...
- virtIO前后端notify机制详解
2016-11-15 本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好! 还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略 ...
- PCI 设备详解一
2016-10-09 其实之前是简单学习过PCI设备的相关知识,但是总感觉 自己的理解很函数,很多东西说不清楚,正好今天接着写这篇文章自己重新梳理一下,文章想要分为三部分,首先介绍PCI设备硬件相关的 ...
- areas表-省市区
不全,缺少台湾省.香港.澳门:新疆重复了 /* Navicat MySQL Data Transfer Source Server : win7_local Source Server Version ...