函数不能返回局部变量的引用,但类的引用数据成员却可以引用构造函数的形参(局部变量),然而无意义

Python和Spyder:一个完美的编程组合 而Spyder作为一个专门为科学计算和数据分析而设计的IDE,提供了高效的开发环境和丰富的工具。无论是初学者还是专业开发者,Python和Spyder都能满足他们的需求,并为他们的工作带来便利和效率。本文将探讨Python和Spyder之间的关系,以及它们如何相互配合,提供一流的编程体验。每个工具都有其特定的优势和适用场景,开发者可以根据自己的需求选择合适的工具。而Spyder作为一个专门为科学计算而设计的IDE,提供了编写、调试和执行Python代码的环境。 阅读详情
// 0728concept.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
//20190728: 成员函数形参的的作用域是函数体内还是类内?
class Base
{
	double i;
	const int cn;
	const int& ir;
public:
	Base(int i):i(i+10),cn(i+2),ir(i)  //按声明顺序初始化 i(形参i+10),cn(形参i+2),ir(形参i)
	{                                  //形参在成员函数体作用域屏蔽同名数据成员
		std::cout<<sizeof(i)<<std::endl;  //返回4 说明sizeof(i)是形参i
	    //但形参的作用域是函数体内 此时同名局部变量并没有屏蔽作用域外(类内)的数据成员?
		std::cout<<Base::i<<std::endl;  //返回12 数据成员
		std::cout<<this->i<<std::endl;  //返回12 数据成员
		std::cout<<i<<std::endl;  //返回2 说明是形参i 
		std::cout<<cn<<std::endl; //返回4 说明cn(i+2)是形参i 
		std::cout<<ir<<std::endl; //返回2 说明ir(i)是形参i 
		//常整型cn被初始化为i+2=4好理解 整型引用ir怎么能引用一个构造函数内的局部变量(形参i)呢???
		//正解:引用的本质是指针 数据成员ir引用局部变量形参i其实是指向了局部变量i定义时分配的内存 
		//     构造函数退出后虽然局部变量形参i被销毁 但该内存空间仍存在 当ir为常引用时(相当于常指针)将变得不再有意义!
		std::cout<<&ir<<std::endl; //003AF66C
		std::cout<<&i<<std::endl;  //003AF66C
		std::cout<<&(this->i)<<std::endl; //003AF740
	};

};


int _tmain(int argc, _TCHAR* argv[])
{
	char str[40]="God";
	std::cout<<str<<std::endl;
	std::cout<<strlen(str)<<std::endl;
	std::cout<<sizeof(str)<<std::endl;
	std::cout<<sizeof(str[0])<<std::endl;
	
	Base A(2);
	system("pause");
	return 0;
	
}
【WRF-Chem第二期】WRF-Chem有关 namelist 详解 阅读详情

相关推荐

VSCode里玩转AvaloniaUI:手把手教你搭建跨平台桌面应用开发环境(附.NET 7配置避坑)

本文详细介绍了如何在VSCode中搭建AvaloniaUI跨平台桌面应用开发环境,包括.NET 7配置避坑指南。从环境准备、项目创建到调试优化,手把手教你利用VSCode和Avalonia实现高效开发,特别解决了.NET 7依赖等常见问题,助力开发者快速上手跨平台应用开发。

weixin_28826545的博客 576

C++之——默认参数

本文将介绍C++几种定义重载函数时常常出错的点,望与君共勉!

qq_51691526的博客 667

CRISPR筛选全流程指南:从文库构建到数据分析实战

功能基因组学研究需要高效解析基因型与表型的关联,高通量筛选技术是其中的关键工具。基于CRISPR系统的筛选方法通过大规模sgRNA文库扰动基因功能,结合慢病毒递送和测序分析,能够系统鉴定影响细胞增殖、耐药、病毒感染的候选基因。与RNAi或化学小分子筛选相比,CRISPR筛选具有覆盖全基因组、脱靶率低、信号清晰等优势,已广泛应用于药物靶点发现、合成致死和免疫治疗机制研究。本文围绕实验设计与操作中的核心要点展开,涵盖文库扩增、病毒滴度控制、MOI把握、筛选模式选择以及基于MAGeCK的sgRNA丰度分析,并针对

weixin_31188927的博客 281

c++学习之路-内部类和局部类

如果类A定义在类B里,那么类A就是一个内部类(也叫嵌套类)class Man // 内部类 {};};

weixin_45452278的博客 1269

SRA数据下载的一个坑

SRA数据真坑啊!

xuzhougeng blog 3508

基于PLC的冲压件自动生产线电气系统设计【附数据】

考虑到生产线的高效运行和维护简便性,选择了三菱FX系列的可编程逻辑控制器(PLC)作为核心控制单元,该型号的PLC因其高可靠性和强大的功能集,在工业自动化领域有着广泛的应用。最后,在完成初步的软件开发后,进行了多轮次的模拟测试和现场调试,逐步修正了存在的问题,最终达到了预期的功能要求。例如,对于进料环节,选用了光电传感器以精确检测物料的位置;此外,为了适应不同尺寸的工件加工需求,还特别设计了一套可调节的夹具系统,不仅提高了生产线的灵活性,同时也降低了更换模具的成本。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1291

实例讲解C++中lambda表达式

测试环境 windows 7  vs2013 C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。例如GPU编程中常用到。 一个最简单的lamada表达式程序 #include #include using namespace std; int main() {     function  fun = [](){cout << "hello la

huangshanchun的专栏 1万+

Zemax实战:20×超高清变焦镜头设计全流程解析(从架构到制造)

本文详细解析了使用Zemax软件设计一款20倍变焦比、恒定F2.8光圈8K超高清镜头的全流程。从应对恒定光圈、宽光谱与8K解析力三大挑战的初始架构规划,到构建多重组态模型、分七阶段进行像差优化与公差分析,最终跨越制造鸿沟,为广播级影视与高精度工业检测应用提供了实战指南。

sun99的博客 551

C++ lambda 捕获列表

lambda 表达式 不允许直接使用外部作用域中的变量,除非它们被显式地捕获。捕获列表 [x] 可以捕获一个或多个外部变量,[=] 可以捕获所有外部变量(按值),而 [&] 捕获所有外部变量(按引用)。如果没有捕获列表,lambda 内部不能直接访问外部变量,这也是 C++ 对作用域和变量生命周期的保证。通过捕获列表,C++ 保证了 lambda 的作用域不会无意中影响外部变量的生命周期,从而避免了潜在的错误和副作用。

u013798595的博客 1996

告别两个电源模块!用UCD3138+四开关Buck-Boost,一个电路搞定电池充放电(附原理图分析)

本文详细介绍了采用UCD3138数字控制器和四开关Buck-Boost拓扑的双向DC/DC变换器设计,实现单一电路完成电池智能充放电管理。该方案显著降低BOM成本和PCB面积,提升系统效率至96.2%,适用于UPS、通信基站和储能系统,具有高效、紧凑和成本优势。

weixin_30256901的博客 397

【人工智能论文发表】基于医学病例文本和多模态大模型的医疗影像分割方法研究

摘要:本研究提出MMS-Former,一种基于级联多模态Transformer的文本引导医学图像分割框架。该模型创新性地将临床文本信息深度融入图像分割全过程,通过SwinUNETR提取视觉特征,ClinicalBERT编码病历文本,并在解码器的每个上采样阶段通过交叉注意力模块实现多级文本特征融合。实验表明,相比纯视觉模型,MMS-Former在Dice系数和IoU指标上分别提升3%以上,在处理边界模糊目标时表现尤为突出。模型还设计了结合Dice损失和图文对比损失的复合目标函数,确保分割精度与语义对齐。代码实

u012133341的博客 141

关于 C++ 中“不能返回对象引用”的思考

C++的使用者或多或少都听说过这样一句话:函数返回值不能返回对象的引用。 这句话当然是错误的,如果函数返回值真的不能返回对象引用,那编译器直接把这种情况判定为编译错误就可以了。 那这句话究竟是哪里说错了? 我们可以先看看一下代码: A& func(){ A a; return a; } 对象 a 是在函数栈上分配,当 func 函数调用完毕后,对象 a 就会被回收,此时如果把对象 a 的引用当作返回值,那将访问到被回收的内存而导致程序异常出错。 但是看看下面的代码:...

HermanOpenGL的专栏 675

linux 内核OOM问题定位-SLAB_DEBUG

首先看slabinfo按的size排序查看 slub object,可以查看 space 总占用大小,及objects个数判断泄漏点 为kmalloc-128。那个泄露多看/sys/kernel/debug的slab/kmalloc*-的alloc-traces和free-traces。SLAB或者SLUB有一个用就可以,改menuconfig没有clean会覆盖之前的更改,现在看一下编译的过程。或者配置defconfig,配置完之后需要clean后再编译。1,配置menuconfig。

陌上花开缓缓归以的博客 899

C++中函数返回引用,及问题

C++中函数返回引用,及问题

ken2232的博客 4238

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C/C++ 引用作为函数的返回值

(1)什么是引用? 引用就是变量的别名,操作一个变量的引用也就相当于操作变量本身,这一点跟指针很类似,但是操作引用不用像操作指针一样,利用取地址符号,很不方便。而操作引用的话,则跟操作普通变量一样,所以C++之中更加鼓励使用引用。 (2)C++函数为什么要使用引用? C语言之中大量利用指针作为形参或者函数返回值,这是由于值拷贝会有很大的消耗(比如传入传出一个大的结构体)。所以在C++之中使用...

sunlin972913894的博客 2855

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++:类的六个默认函数之一 —— 拷贝构造函数

文章目录拷贝构造函数概念拷贝构造函数特征以传值方式传参数:要点总结: 拷贝构造函数概念 那在创建对象时,可否创建一个与一个对象一某一样的新对象呢? 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。 拷贝构造函数特征 拷贝构造函数也是特殊的成员函数,其特征如下: 拷贝构造函数是构造函数的一个重载形式。 拷贝构...

AngelDg的博客 2582

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++---引用 引用做函数形参、返回 常量引用

解释 引用相当于给对象起了一个新的名字。 简单用法: #include <iostream> #include <string> using namespace std; int main() { int a = 10; int &b = a; cout<<b<<endl; return 0; } 结果...

D_Mr 1849

python的面向对象的类及其类变量、构造函数、成员变量、成员函数、成员函数的形参,成员函数的局部变量

在Python中定义一个类,示例如下: class jiaoTest(): class_variable="变量class_variable是类变量!" def __init__(self, fparm1, fparm2, fparm3="3" ): self.member_variable_1=fparm1 self.member_variab...

jiao_mrswang的博客 1020

C++ 引用变量、引用形参

语法差异:引用使用更简洁的语法,不需要使用解引用操作符来访问值。可变性:指针可以在任何时候改变指向另一个对象,而引用一旦绑定到一个对象,就不能改变指向。安全性:引用比指针更安全,因为引用保证指向一个有效的存储单元。引用是C++中强大的特性,提供了一种安全且易于使用的方式来操作其他变量。它们在函数参数传递、返回值、以及需要直接操作调用者数据时特别有用。然而,使用引用时需要谨慎,特别是作为函数返回值时,确保不会返回局部变量的引用。函数定义时,参数类型后面加上*ptr = 10;// 通过指针修改指向的值。

m0_73640344的博客 1499

Python之构造函数

构造函数 构造函数也被称为构造器,当创建对象的时候第一个被自动调用的函数,系统默认提供了一个无参的构造函数 per = Person() 语法: def __ init__(self,arg1,arg2,...): 函数体 说明: 之前的写法中并没有显示的定义一个个构造函数,所以系统默认提供了一个无参的构造函数 arg1,arg2,...可以自己定义,但是,一般情况下,构造函数的...

qq_38358499的博客 4万+

形参&实参,传值调用&引用调用

形参&实参,传值调用&引用调用引言形参&实参什么是形参如何声明带形参的函数什么是实参二者关系传值调用&引用调用传值调用传值调用的定义传值调用的代码实例引用调用引用调用的定义引用调用的代码实例 引言 相信很多C语言初学者都知道形参实参的概念,但在函数调用中,仍然还有很多人会混淆,本文将借助示例代码详细解释C语言中形参实参及传值调用和引用调用。 形参&实参 函数...

qq_40013374的博客 1万+

C/C++ 中的函数返回局部变量以及局部变量的地址?

C/C++中,函数内部的一切变量(函数内部局部变量,形参)都是在其被调用时才被分配内存单元。形参和函数内部的局部变量的生命期和作用域都是在函数内部(static变量的生命期除外)。子函数运行结束时,所有局部变量的内存单元会被系统释放。在C中,函数被调用时的和。传址的好处:(1) 能在函数内部通过实参地址间接地改变实参的值。(2) 当所传实参内容比较庞大时,过去,指针依据同一个地址访问实参变量。而过去,形参会跟实参占一样大的内存,是有限的。当然了,在弱小的程序中,传址的这个优点不会被体现出来。

xinxin的博客 4990

C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

const关键字const关键字1、什么是const2、使用原理2.1、const全局/局部变量2.2、cosnt修饰指针和引用2.3、const修饰函数参数2.4、const修饰函数返回值2.5、const成员函数和数据成员2.6、const修饰类对象3、const_cast的知识4、const与宏定义的区别5、Static与Const的区别参考 const关键字 1、什么是const const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性

JMW1407的博客 1万+

JS在函数中形参和局部变量同名的问题

前言上次牛客网做到这样一个题,非常有意思,陷阱非常多,当时觉得搞明白了,现在再看到,又糊涂了,发现了新的点,看一下:var foo={n:1}; (function (foo) { console.log(foo.n); foo.n = 3; var foo = {n:2}; console.log(foo.n); })(foo); console.log(foo.n

qq_23870025的博客 3443

为什么拷贝构造函数必须为引用传递,不能是值传递?

对于拷贝构造函数引用传递,似乎司空见惯,认为理所当然。但是被问起这个问题,的确是一片茫然,为什么呢? 去网上搜索了一下,的确有很多这方面的知识讲解。 我们先看一下优快云上的一个帖子的回答: 简单的回答是为了防止递归引用。 具体一些可以这么讲:  当 一个对象需要以值方式传递时,编译器会生成代码调用它的拷贝构造函数以生成一个复本。如果类A的拷贝构造函数是以值方式传递一个类A对象作

-.-嘻嘻 3372

实参、形参、局部变量和全局变量

目录实参和形参实参数据传递函数调用过程形参实参和形参的关系局部变量和全局变量局部变量局部变量的作用域说明:全局变量全局变量说明: 实参和形参 实参 实际参数简称“实参”。在调用有参函数时,函数名后面括号中的参数称为“实际参数”,实参可以是常量、变量或表达式。 在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)。 实参可以是常量、变量或表达式, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些

Vxxxx_的博客 9490
上一篇: 顶层const指针type * const p;底层const指针type const* p
下一篇: 消息映射查找机制
HayPinF
博客等级 码龄9年 175粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值