【无返回值函数】

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语句的更多相关文章

  1. 函数----基础,参数传递,返回类型和return语句

    一.函数基础1.形参和实参 实参是形参的初始值.第一个实参初始化第一个形参,第二个实参初始化第二个形参,以此类推.尽管实参与形参存在对应关系,但是并没有规定实参的求值顺序.编译器能以任意可行的顺序对实 ...

  2. 返回类型和return语句

    return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return语句有两种形式: return; return expression; 无返回值函数 没有返回值的return语句只 ...

  3. 返回类型和 return 语句

    return 语句终止当前正在执行的函数并将控制权返回到调用该函数的地方.return 语句有两种形式: return; return expression; 不要返回局部对象的引用或指针: 函数完成 ...

  4. 关于类中的参数类型和return返回值

    基础有些忘了,现在重新巩固一下 先定义一个Person类 class Person(): def __init__(self,name,age,height): self.name=name, sel ...

  5. 【c++ primer, 5e】类的其他特性(卒)

    1 - Class Members Revisited 2 - Functions That Return *this 3 - Class Types 4 - Friendship Revisited ...

  6. try {}里有一个return语句 finally执行顺序

    先看例子 package example; class Demo{ public static void main(String args[]) { int x=1; System.out.print ...

  7. GO学习笔记 - 没有参数的 return 语句返回各个返回变量的当前值,这种用法被称作“裸”返回。

    Go 的返回值可以被命名,并且就像在函数体开头声明的变量那样使用. 返回值的名称应当具有一定的意义,可以作为文档使用. 没有参数的 return 语句返回各个返回变量的当前值.这种用法被称作“裸”返回 ...

  8. Python return语句 函数返回值

    return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...

  9. java try中包含return语句,finally中的return语句返回顺序

    //结论: finally 中的代码比 return 和 break 语句后执行 public static void main(String[] args) { int x=new Test.tes ...

随机推荐

  1. iOS7Status bar适配

    一 Status bar重叠问题: - Zherui if ([[[UIDevicecurrentDevice] systemVersion] floatValue] >= 7.0) { sel ...

  2. IT 运行在云端,而云运行在 Linux 上

    导读 IT 正在逐渐迁移到云端.那又是什么驱动了云呢?答案是 Linux. 当连微软的 Azure 都开始拥抱 Linux 时,你就应该知道这一切都已经改变了.不管你接不接受, 云正在接管 IT 已经 ...

  3. 全链路追踪spring-cloud-sleuth-zipkin

    微服务架构下 多个服务之间相互调用,在解决问题的时候,请求链路的追踪是十分有必要的,鉴于项目中采用的spring cloud架构,所以为了方便使用,便于接入等 项目中采用了spring cloud s ...

  4. 桌面不显示IE图标解决方法

    如果你的是WIN7,恰好你的桌面上IE图标不知道怎么被搞咩了. 向这里看过来,这里有一个文件你正好能用上. 使用方法很简单: 猛戳下载,猛戳两下安装 下载解决

  5. 一个非常棒的jQuery 评分插件--好东西要分享

    现在做网页已经不仅限于实现功能了,更多的是要实现功能的同时追求更加美观的实现.比如页面上让用户评分的功能,你完全可以放5个RdioButton让用户选择分数,也可以用DropDownList来实现,但 ...

  6. 【react路由】react 路由被自动加了个#

    路由自动加#是由hashhistory造成: https://segmentfault.com/q/1010000012097148 单页面应用 前端跳转 or 服务器跳转: https://my.o ...

  7. docker网络实践

    docker网络.md #docker 网络模式 环境 centos7.4 , Docker version 17.12.0-ce docker自带网络类型 bridge,host,none,cont ...

  8. Apache的访问控制

      目录配置段 注释不能写在指令后面,下面这样是不行的,应当换行,但为了阅读方便我就这么写了 Alias /dir/  "/var/www/html/admin"      #路径 ...

  9. Mybatis框架学习总结-优化Mybatis配置文件中的配置

    连接数据库的配置单独放在一个properties文件中 之前,是直接将数据库的连接配置信息卸载了Mybatis的conf.xml文件中,如下: <?xml version="1.0&q ...

  10. maven 之 web.xml 头设置错误问题

    1.一般开发工具创建web.xml的时候会默认添加web.xml头,而有些插件(例如maven相关插件)默认添加的为 版本和你的开发工具Project facets(项目特性)中设置不同.那么就会导致 ...