具有返回值的函数之作为

CircuitBreaker Resilience4J 介绍 在分布式环境中,我们的应用可能会面临着各种各样的可恢复的异常(比如超时,网络环境异常),此时我们可以利用不断重试的方式来从异常中恢复(Retry Pattern),使整个集群正常运行。然而,也有一些异常比较顽固,突然发生,无法预测,而且很难恢复,并且还会导致级联失败(举个例子,假设一个服务集群的负载非常高,如果这时候集群的一部分挂掉了,还占了很大一部分资源,整个集群都有可能遭殃)。如果我们这时还是不断进行重试的话,结果大多都是失败的。 阅读详情

首先解释一下文章标题,听起来有点拗口,意思是:具有返回值的函数,在调用时以及返回时都做了哪些事情(这些事情往往从代码表面是看不到的)。


一、原理

关于函数的返回值,先说下 return 语句,return 语句结束当前正在执行的函数,并将控制权返回给调用此函数的函数。有两种形式


1.return; //不带返回值的函数中(void)

不带返回值的 return 语句只能用于返回类型为 void 的函数。但是注意:在返回类型为void的函数中,return 语句也不是必须的,隐式的 return 发生在函数的最后一个语句完成时。

一般情况下,返回类型为 void 的函数使用 return 语句是为了引起函数的强制结束(类似于循环结构中的break语句)。


2.return expression: //带返回值的函数中(非void)

此情况下,返回值的类型必须和函数的返回类型相同,或者能隐式转化为函数的返回类型。

函数的返回值:用于初始化在调用函数出创建的临时对象(temporary object)。

对于具有返回值的函数,在函数调用时(如求解表达式),需要一个地方存储器运算结果,此时编译器会创建一个没有命名的对象-----临时对象。

如:

...
int add(int a, int b)
{
    return a + b ;
}
....
int a = 1;
int b = 2;
int c = add(a, b); //create temporary, delete it after executing this statement
...

上面的代码中,在 int c = add (a, b);时,发生了如下事情:

  • 首先:创建了一个临时对象,如temp。
  • 然后:将函数的返回值 a+ b 的副本 复制给 temp;
  • 最后:将temp 的副本复制给 变量 c,并删除临时变量 temp

:在英语中,C++ 程序员通常用temporary 这个术语来代替 temporary object。


二、例子

为了更清晰地看到具有具有返回值函数之作为,下面以一个类的运行情况说明:

#include <iostream>
using namespace std;
class A
{
private:
	int m_x;
public:
	A(int x=0):m_x(x){cout<<"constructor, value: "<<m_x<<endl;}
	A(const A& a)
	{
		m_x = a.m_x;
		cout<<"copy constructor, value: "<<m_x<<endl;
	}
	A& operator=(const A& a)
	{
		m_x = a.m_x;
		cout<<"assignment operator, value: "<<m_x<<endl;
		return *this;
	}
	~A(){cout<<"destructor, value: "<<m_x<<endl;}
	A getOneObject(int x)
	{
		cout<<"in fun call"<<endl;
		A a(0);
		a.m_x =x;

		return a;
	}

};

int main()
{
	A a1(1);
	A a2(2);
	cout<<"before fun call"<<endl;
	a2= a1.getOneObject(3);
	cout<<"after fun call"<<endl;
	cout<<"before quit"<<endl;
	return 0;
}

同时注意输出结果的变化



:上面的程序main中其实不是高效的写法,可以使用【程序员的优化】(详见《C++对象模型》的程序转换语义学之在使用者层面做优化:P65)

可修改main函数如下:

int main()
{
	A a1(1);
	//A a2(2);
	cout<<"before fun call"<<endl;
	A a2= a1.getOneObject(3);
	cout<<"after fun call"<<endl;
	cout<<"before quit"<<endl;
	return 0;
}

输出结果:



参考

《C++ Primer 中文版》P211-P215

《深度探索C++对象模型》P60-P69


老司机避坑指南:UC3842自举驱动电路发热严重?这样选C39/C37电容值最稳 本文针对UC3842自举驱动电路发热严重的问题,深入剖析了驱动波形边沿速度与损耗的矛盾根源。通过实测数据与热成像分析,重点阐述了关键电容C39/C37的选型策略,提供了从经验公式到量化计算的优化方法,帮助工程师在发热与效率间找到最佳平衡点,并探讨了分立方案与专用驱动IC的适用场景。 阅读详情

相关推荐

为什么传统CNN在视网膜分割中败给Mamba?从血管拓扑学揭秘Serp-Mamba的蛇形扫描黑科技

本文深入分析了传统CNN在视网膜血管分割任务中的局限性,特别是在处理高分辨率图像和复杂血管拓扑结构时。针对这些问题,文章重点介绍了Serp-Mamba模型的核心创新——蛇形交织自适应扫描(SIA)机制,该机制通过让扫描路径自适应地贴合血管曲率,并结合模糊驱动双重校准(ADDR)模块应对极端类别失衡,从而在视网膜血管分割任务上实现了性能的显著突破。

ss78901的博客 840

C++:函数

1、函数定义五个步骤:A:返回值类型;B:函数名;C:参数列表;D:函数体语句;E:return表达式 语法:返回值类型 函数名 (参数列表) { 函数体语句 return表达式 } 函数不需要返回值,声明的时候可以写void,return可以不写; 2、函数的调用 语法:函数名(参数) #include<iostream> using nam...

m0_46761016的博客 226

openclaw本地模型对接

使用是官方推荐的一种集成方式,它可以简化配置过程。但由于您的系统环境和之前复杂的配置历史,我为您梳理了一个核心流程,并增加了关键的“事后检查”步骤,以确保能从根本上解决问题。

suny8的专栏 2390

关键字return/void

关键字returnreturn语句用来终止当前正在执行的函数并将控制权返回到调用该函数的地方。return有两种形式: 1).return; 无返回值函数 没有返回值的return语句只能用在返回类型为void的函数中。void类型的函数不要求非得有return语句,在这类函数最后一句会隐式的执行return(最常见的是main函数,这个下面说) 直接上列子说明 voi

nightfall_Forever 1121

void类型声明中使用return

函数用void类型声明代表不需要返回值。 但是,有时候需要在函数内部强行终止函数继续运行下面的语句。这时用return语句。 例如这个oj题https://leetcode-cn.com/problems/letter-case-permutation/ 给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。 class Solution { private: vector<string> ans; public:

qq_35293120的博客 3193

return和void

转自https://blog.csdn.net/nightfall_/article/details/52250358?locationNum=3&amp;fps=1 return return语句用来终止当前正在执行的函数并将控制权返回到调用该函数的地方。return有两种形式: (1) return; 无返回值函数 没有返回值的return语句只能用在返回类型为void的函数中。...

skyang在路上 6974

【拆机】SG105五口千兆交换机

五口千兆交换机产品拆解,电路原理及产测方法分析

拱不到白菜的猪 1万+

2026年家用交换机选购指南:千兆与2.5G如何选?端口与PoE怎么定?

交换机作为网络数据交换的核心设备,其工作原理是通过MAC地址学习与转发,实现局域网内设备的高效互联。从技术原理上看,交换机的背板带宽、包转发率等参数决定了其数据吞吐能力,而芯片方案则影响着稳定性和成本。在家庭和小型办公场景中,交换机的技术价值在于扩展有线网络端口、构建高速稳定的内网环境,并能通过PoE功能简化布线。具体到应用场景,无论是连接NAS实现高速文件共享,还是为监控摄像头和无线AP集中供电,一台合适的交换机都是优化网络架构的关键。本文聚焦于**千兆与2.5G网络规格**的选择,以及**PoE供电功能

weixin_33816946的博客 339

2026年交换机选购全指南:从百兆到万兆,按场景与预算精准选型

交换机作为构建局域网(LAN)的核心设备,工作在OSI模型的数据链路层,负责同一网络内设备间的数据交换。其工作原理是基于MAC地址表进行数据帧的转发,从而实现高效、稳定的内部通信。这项技术的核心价值在于扩展网络端口、提升内网传输效率并隔离冲突域。在家庭、办公室、工作室等应用场景中,选择合适的交换机是保障网络性能的基础。本文聚焦于**交换机选购**与**网络搭建**,针对不同用户群体的实际需求,提供了从百兆、千兆到万兆的清晰选型逻辑、具体型号参考及实战配置指南,帮助读者构建稳定高效的有线网络环境。

weixin_33847182的博客 437

2021-06-02

标题<C语言程序设计现代方法> 第九章函数 9.1函数的定义和调用 C语言中函数不一定要有参数,也不一定要有计算值. 函数本质上是一个自带声明和语句的小程序. 函数的形式参数在本质上是变量,其初始化值在调用函数的时候才提供. 实际参数不一定是变量,任何正确类型的表达式都可以. 函数的返回类型也可以是void(void是一种没有值的类型). 调用不带实际参数的函数时要写出函数名并加上一对圆括号. 9.1.1函数定义 返回类型 函数名(形式参数){声明语句} 函数不能返回数组 返回类型void说明函

weixin_54023240的博客 204

关于带返回值函数返回值———测试千行,不如反汇编一行

int foo(int i, int j) { int k = i+j; } int main() { cout << foo(3,4) << endl; } 上述代码在g++编译器环境下,能够顺利编译,也能够顺利运行。但是输出的是什么值呢? 答:这其实取决与你的编译器,反汇编后就可以看出,如果编译器在foo中的反汇编代码中使用了%rax,那么返回值是%rax中的值...

LemintC的博客 714

详解函数返回值类型和return语句

返回类型和return语句 return语句的功能就是终止当前程序的函数,返回调用函数的地方。 语法形式:return;或者return expression; 无返回值类型 没有返回值的return语句只能返回类型是void函数。返回void的函数不要求非得有return语句,编译器会在void函数的最后一句加上一个return语句。 可以使用return语句,在void函数中提前退出。与在迭代...

algsup 3万+

某些情况下调用函数为什么要在函数名前加“(void)”

我们知道,在定义函数时,加在函数名前的“void”表示该函数没有返回值。但在调用时,在函数名前加“(void)”的作用又是什么呢? 最明显的一点就是表示程序并不关心调用该函数后的返回值是什么,比如函数strcpy,我们直接用“strcpy(des_str, src_str);”这样的形式来调用。strcpy()原型声明:char *strcpy(char* dest, const...

1168

Mockito 如何 mock 返回值为 void 的方法

最初接触 Mockito 还思考并尝试过如何用它来 mock ...

weixin_33800463的博客 4226

函数-函数的概述与应用

1.函数的定义    函数就是定义在类中的具有特定功能的一段独立小程序。    函数也称为方法。 2.函数的格式    修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)    {                              执行语句;                              return 返回值;     } 修饰符

yaner22的博客 410

带有返回值函数return

带有返回值函数的语法格式 def 函数名(): 实现代码 return 数据 # 这里返回的数据就是返回值 因为函数调用后有返回值,需要使用变量保存这个返回值 result = 函数名() print(result) def sum_num(num1, num2): value = num1 + num2 # print("函数内使用value,该数据为:", value) # 通过return 把函数内的value返回给调用者 return va.

缘 源 园 3534

c语言return和void的区别,return

return(C语言语句)编辑锁定讨论上传视频函数是C语言的基本构件,一个C程序可以由一个主函数和若干个子程序函数构成,由主函数调用其它子程序函数,其他子程序函数也可以互相调用。通常希望通过函数调用使主函数能得到一个确定的值,这就是函数返回值。[1]中文名return外文名return解释返回到主调函数继续执行概念需要用void声明其类型属于语种return简介编...

weixin_29027285的博客 2924

C语言函数

C语言函数 创建函数 函数返回值类型 函数名(函数参数) { //函数体 return 函数返回值; } strlen函数仿写 strcmp函数仿写 strcat函数仿写

qq_66954747的博客 1221

Python技术手册 · 函数的多返回值&文件操作

Python技术手册 · 函数的多返回值&文件操作 一些概念解析与代码实例

文豪野橘Sam的博客 2038

python中函数返回值详解【超详细】

现实生活中的场景:我给儿子10块钱,让他给我买包烟。这个例子中,10块钱是我给儿子的,就相当于调用函数时传递到参数,让儿子买烟这个事情最终的目标是,让他把烟给你带回来然后给你对么,,,此时烟就是返回值开发中的场景:定义了一个函数,完成了获取室内温度,想一想是不是应该把这个结果给调用者,只有调用者拥有了这个返回值,才能够根据当前的温度做适当的调整综上所述:所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果。

weixin_68789096的博客 9306

【Python】函数进阶 ① ( 函数返回多个返回值 | 函数参数传递类型简介 | 位置参数 | 关键字参数 )

一、函数返回多个返回值 二、函数参数传递类型 1、位置参数 2、关键字参数

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2万+

海康Visionmaster4.2版本深度学习详细学习总结资料

海康Visionmaster4.2版本深度学习算法开发平台是海康机器人自主开发的机器视觉软件,致力于为客户提供快速搭建视觉应用、解决视觉检测难题的算法工具, 能满足视觉定位、尺寸测量、缺陷检测以及信息识别等机器视觉应用。

个股买卖价差(相对报价价差和相对有效价差)日数据(2003-2024年2月)xlsx和dta格式

个股买卖价差数据区间2003年-2024年2月的日度数据,共 1300 万条数据上市公司A股字段说明变量定义证券代码交易日期相对报价价差(等权平均)(卖价-买价)/买卖价中点价格,简单平均计算。相对有效价差(等权平均)2×(成交价-买卖价中点价格)绝对值/买卖价中点价格,简单平均计算。相对报价价差(时间加权平均)(卖价-买价)/买卖价中点价格,权重为相邻两笔交易记录的时间间隔。相对有效价差(时间加权平均)2×(成交价-买卖价中点价格)绝对值/买卖价中点价格,权重为相邻两笔交易记录的时间间隔。相对报价价差(成交量加权平均)(卖价-买价)/买卖价中点价格,权重为交易发生时的成交量。相对有效价差(成交量加权平均)2×(成交价-买卖价中点价格)绝对值/买卖价中点价格,权重为交易发生时的成交量。相对报价价差(成交金额加权平均)(卖价-买价)/买卖价中点价格,权重为交易发生时的成交金额。相对有效价差(成交金额加权平均)2×(成交价-买卖价中点价格)绝对值/买卖价中点价格,权重为交易发生时的成交金额。有效数据条数进行以上

上一篇: C++中如何修改const变量
下一篇: C++ 智能指针类
heyabo
博客等级 码龄15年 175粉丝 43原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值