C++ Primer阅读笔记--返回类型和return语句

news2024/11/26 4:40:50

1--返回引用

        同其他引用类型一样,如果函数返回引用,则该引用仅是所引对象的一个别名;则返回结果时不会发生拷贝操作;

        不能返回局部对象的引用或指针;因为局部对象在函数结束后会被释放,从而其引用或指针将指向无效的对象或内存区域;

引用返回左值:

        函数的返回类型决定函数调用是否是左值,调用一个返回引用的函数得到左值,其他返回类型则得到右值;

        下面的例子中,返回值是一个引用,因此其是一个左值,可出现在赋值运算符的左侧:

#include <iostream>
#include <string>

char &get_val(std::string &str, std::string::size_type ix){
    return str[ix];
}

int main(int argc, char *argv[]){
    std::string s("a value");
    std::cout << s << std::endl;
    get_val(s, 0) = 'A'; // get_val(s, 0)返回一个引用,其为一个左值
    std::cout << s << std::endl;
    return 0;
}

2--返回列表

        C++11 新标准规定,函数可以返回花括号包围的值的列表;类似于其他返回结果,返回的列表可用来进行初始化;

#include <iostream>
#include <string>
#include <vector>

std::vector<std::string> process(std::string A, std::string B){
    if(A.empty())
        return {};
    else if(A == B)
        return {A, "equal", B};
    else
        return {A, "not equal", B};
}

int main(int argc, char *argv[]){
    std::string a = "ABC";
    std::string b = "DEF";
    std::vector<std::string> stat = process(a, b); 
    for(auto item : stat)
        std::cout << item << std::endl;
    return 0;
}

3--返回数组指针

        因为数组不能被拷贝,所以函数不能返回数组,但可以返回数组的指针或引用;

首先回顾数组与指针的组合:

        int arr[10]; // arr是一个含有10个整数的数组

        int *p1[10]; // p1是一个含有10个指针的数组,即p1指向一个数组,数组内的元素都是指针;

        int (*p2)[10] = &arr; // p2是一个指针,其指向含有10个整数的数组;将(*p2)理解为一个整体,例如用 using tmp = (*p2)替换,则等效于int tmp[10]; tmp是一个含有10个整数的数组,而p2是一个指针,因此其指向含有10个整数的数组;

当定义一个返回数组指针的函数时,数组的维度必须跟在函数名之后,即:

        Type ( *function(parameter_list) )[dimension];

int (*func(int i))[10];
// func(int i)表示调用func()函数,其需要一个int型的实参
// (*func(int i))表示可以对函数的返回结果进行解引用
// (*func(int i))[10]表示解引用func的返回结果是一个大小为 10 的数组
// int (*func(int i))[10]表示数组中的元素是 int 类型

        在 C++11 新标准中,函数定义可以使用尾置返回类型,其适用于返回类型是数组的指针或者数组的引用,例如:

        auto func(int i) -> int(*)[10];

        将函数的返回类型放在形参列表之后,可以清楚知道返回的是一个指针(*),其指向一个含有10个整数的数组;

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

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

相关文章

【第六篇:测试左移-研发流程优化】

(1)规范了技术需求的研发流程(和产品需求一样走相同的流程,只不过需求的主R变为了RD) (2)规范了需求变更流程:需求变更要合理并做到全员周知; (3)强调冒烟不过,提测打回流程; (4)增加交互视觉评审环节,方便RD更合理估时; (5)规范回归测试流程,回归测试时需…

PbootCMS Sqlite数据库转Mysql数据库教程 sqlite转mysql

PbootCMS默认采用的是Sqlite数据库,系统自带完整后台以及一套响应式模板,放入PHP(5.3+)环境即可直接使用 线上搭建简易环境为:Apache 、 PHP5.6-PHP7.3 、 Mysql5.5+ 所以如果已经上线一段时间了,网站已经有较多内容后要想换成Mysql版本是很不方便的,以下就是快速将Mys…

WebSocket的那些事(2-实操篇)

目录 一、概述二、Websocket API1、引入相关依赖2、配置WebSocket处理器3、WebSocket配置4、测试 三、总结 一、概述 在上一节 WebSocket的那些事&#xff08;1-概念篇&#xff09;中我们简单的介绍了关于WebSocket协议的相关概念、与HTTP的联系区别等等。 这一节将会带来Web…

BM59-N皇后问题

题目 N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后。 要求&#xff1a;任何两个皇后不同行&#xff0c;不同列也不在同一条斜线上。 求给一个整数 n &#xff0c;返回 n 皇后的摆法数。 数据范围: 1≤n≤9。 要求&#xff1a;空间复杂度 O(1) &#xff0c;时间复杂度 O(…

牛客 NC24724 Feb S]Chocolate Eating 解题报告

原题链接&#xff1a; 登录—专业IT笔试面试备考平台_牛客网 题目描述&#xff1a; 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 Bessie has received N (1 < N < 50,000) chocolates from the bulls, but doesnt want to …

Notepad++ 配置python环境及虚拟环境

背景&#xff1a; 在执行某些项目的时候&#xff0c;经常会否遇到这样一种情况(以python语言为例)&#xff1a;不想在python的基础环境下运行&#xff0c;创建了虚拟环境来装相关项目的包&#xff0c;但是每次使用都要切换到虚拟环境下面使用"activate "命令激活环境…

C++linux高并发服务器项目实践 day8

Clinux高并发服务器项目实践 day8 内存映射内存映射相关系统调用例子思考问题案例2案例3 信号信号的5中默认处理动作信号相关函数kill、raise和abort函数alarm函数案例 setitimer函数 signal信号捕捉函数 内存映射 内存映射是将磁盘文件的数据映射到内存&#xff0c;用户通过修…

Spring MVC数据格式化与验证以及国际化和中文乱码处理

目录 Spring MVC数据格式化 基本介绍 ConversionService converters 基本数据类型和字符串自动转换 代码实例 -页面演示方式 创建Monster 类 创建data_valid.jsp 创建MonsterHandler类 创建monster_addUI.jsp 解读: 说明 阶段测试一下 ​编辑 继续完成功能 创建s…

springboot+vue校园疫情防控系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园疫情防控系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

理想汽车VS特斯拉,电动汽车正在吞噬世界

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 电动汽车正在吞噬世界 长期以来&#xff0c;电动汽车在美国一直是一项边缘技术&#xff08;当时主要是加州的环保主义者和科技圈在关注&#xff09;。即使现在如日中天的特斯拉(TSLA)&#xff0c;当年也是在成立三年后的20…

【案例1】图书馆管理系统毕业论文

博主介绍&#xff1a; &#x1f680;自媒体 JavaPub 独立维护人&#xff0c;全网粉丝打大于100w&#xff0c;csdn博客专家、java领域优质创作者&#xff0c;51ctoTOP10博主&#xff0c;知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和副业。&#x1f680; …

npm私有仓库(nexus)-Vue组件发布到nexus

1、创建组件项目 进入项目目录并 执行 npm install 安装依赖&#xff0c;npm run dev 运行&#xff0c;此时浏览器打开 http://localhost:8080 可看到初始化页面 2、在 src 目录下新建测试组件&#xff0c;如下图所示 3、项目目录下新建组件暴露文件 4、修改 package.json pri…

Spring Boot项目使用maven的jib插件打docker使用所需的镜像tar包

jib插件介绍 Jib是一个由Google开发的基于Docker镜像构建的工具&#xff0c;它的Maven插件可以让我们以更高效的方式构建和管理Docker镜像。使用Jib&#xff0c;我们可以摆脱手动编写Dockerfile的繁琐过程&#xff0c;而是直接将我们的Java应用程序打包为镜像&#xff0c;并将…

CPU狂飙900%,该怎么处理?

一位小伙伴面试了 网易&#xff0c;遇到了一个 性能类的面试题&#xff1a;CPU飙升900%&#xff0c;该怎么处理&#xff1f; 可惜的是&#xff0c;以上的问题&#xff0c;这个小伙没有回答理想。 最终&#xff0c;导致他网易之路&#xff0c;终止在二面&#xff0c;非常可惜 …

MySQL学习笔记第九天

第08章聚合函数 上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类&#xff0c;叫做聚合&#xff08;或聚集、分组&#xff09;函数&#xff0c;它是对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&#xff0c;输出的是单个值。 1.聚合函数介绍 什么是聚合…

智能优化算法:袋獾优化算法-附代码

智能优化算法&#xff1a;袋獾优化算法 文章目录 智能优化算法&#xff1a;袋獾优化算法1. 袋獾优化算法1.1 初始化1.2 策略一&#xff1a;以腐肉为食&#xff08;探索阶段&#xff09; 2.实验结果3.参考文献4.Matlab 摘要&#xff1a;袋獾优化算法&#xff08;Tasmanian Devil…

MyBatis官方文档学习笔记(一)

本笔记根据mybatis官方文档顺序学习&#xff0c;根据本笔记可快速掌握mybatis的使用。 1 快速开始 1.1 快速开始 1.1.1 安装 使用MyBatis之前必须要安装mybatis-x.x.x.jar驱动文件到类路径中&#xff0c;如果使用的是Maven工程&#xff0c;则只需要导入下面的依赖即可&…

Java集合-Java集合基础

目录 讲一讲Java集合吧 集合的使用 为什么要使用集合&#xff1f; 如何选用集合? Collection Collection与Collections的区别是什么&#xff1f; Collections.sort和Arrays.sort的实现原理 为何Collection不从Cloneable和Serializable接口继承&#xff1f; 线程安全集…

面向开发人员的 ChatGPT 提示语教程中文版

面向开发人员的 ChatGPT 提示语教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

新魔百盒M304A_增强版2+16G_S905系列_UWE5621DS_卡刷/线刷固件包-当贝桌面

新魔百盒M304A_增强版216G_S905系列_UWE5621DS_卡刷&#xff0f;线刷固件包-当贝桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内…