社区
C++ 语言
帖子详情
函数返回静态局部对象引用问题
待续_1006
2017-04-07 10:17:54
看图就可以了,已经描述的很清楚了
为什么B1,B2,B3中的num不相等,他们不都是同一静态局部对象的别名吗?
...全文
156
3
打赏
收藏
函数返回静态局部对象引用问题
看图就可以了,已经描述的很清楚了 为什么B1,B2,B3中的num不相等,他们不都是同一静态局部对象的别名吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
幻夢之葉
2017-04-07
打赏
举报
回复
每次取都是同一个实例,但是之后你赋值给了一个新的对象,每次num的值都增加了1 就比如更简明的例子 static int a = 1; ++a; int b = a; ++a; int c = a; b c 当完成拷贝之后是脱离了=右边的对象 回到你的题目: b1,b2,b3都是一个新的对象,内存地址也不会跟静态对象相同, 完成拷贝之后就脱离了静态对象,num的值也会发生应有的变化。
Saleayas
2017-04-07
打赏
举报
回复
Base &b1 = ...; 你获取的是唯一的,但是你用这个唯一的值来赋值了。 被赋值的不是唯一,使用引用就可以了。 你可以尝试定义 private 构造函数就可以看到区别了。
paschen
版主
2017-04-07
打赏
举报
回复
b1 b2 b3都是同一个变量的引用,所以他们的值都是相等的 但b1 b2 b3是3个不同的变量,他们的地址是不同的 你下面的printf输出的是地址
函数
返回
局部
变量的指针或
引用
一般来说,由于在离开
函数
后
局部
变量会被释放,所以是不允许
函数
返回
指向
局部
变量的指针或
引用
的。我们往往需要遵循如下原则:
引用
作为
返回
值,必须遵守以下规则:(1)不能
返回
局部
变量的
引用
。主要原因是
局部
变量会在
函数
返回
后被销毁,因此被
返回
的
引用
就成为了"无所指"的
引用
,程序会进入未知状态。(2)不能
返回
函数
内部new分配的内存的
引用
。虽然不存在
局部
变量的被动销毁
问题
,可对于这种情况(
返回
函数
内部new分...
C++ | C++入门总结(五)
局部
静态
对象
、使用
引用
避免拷贝、含有可变形参的
函数
、
返回
数组的指针、内联
函数
、
函数
指针
局部
静态
对象
某些时候,有必要令
局部
变量的生命周期贯穿
函数
调用及之后的时间。可以将
局部
变量定义成 static 类型从而获得这样的
对象
。
局部
静态
对象
( local static object )在程序的执行路径第一次经过
对象
定义语句时初始化,并且直到程序终止才被销毁,在此期间即使
对象
所在的
函数
结束执行也不会对它有影响。 如果
局部
静态
变量没有显式的初始值 , 它将执行值初始化。内置类型的
局部
静态
变量初始化为 0。 int GetCount() { static int count; retur..
Self Summary: C++
函数
返回
引用
和指针的
问题
,
局部
对象
与new
对象
的
问题
C++的
局部
对象
的概念: 作用域在
局部
范围内(例如
函数
)的
对象
。这样的
对象
可以把
对象
的
引用
或者指针存在栈中,随着
函数
的结束而销毁,而把创建的
对象
内容存在堆中。如果需要在堆上创建
对象
,要么使用new运算符,要么使用malloc系列
函数
。 而关键是理解好“自动存储”的概念[1]: Object obj; 此时,obj是在栈上分配的吗? 要回答这个
问题
,我们首先要理解这个语
函数
返回
局部
变量
问题
一般的来说,
函数
是可以
返回
局部
变量的,但是要注意几种情况。
局部
变量的作用域只在
函数
内部,在
函数
返回
后,
局部
变量的内存已经释放了。因此,如果
函数
返回
的是
局部
变量的值,不涉及地址,程序不会出错。但是如果
返回
的是
局部
变量的地址(指针)的话,程序运行后会出错。因为
函数
只是把指针复制后
返回
了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,
函数
不能通过
返回
指...
函数
返回
局部
变量
一般的来说,
函数
是可以
返回
局部
变量的。
局部
变量的作用域只在
函数
内部,在
函数
返回
后,
局部
变量的内存已经释放了。因此,如果
函数
返回
的是
局部
变量的值,不涉及地址,程序不会出错。但是如果
返回
的是
局部
变量的地址(指针)的话,程序运行后会出错。因为
函数
只是把指针复制后
返回
了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,
函数
不能通过
返回
指向栈内存的指针(注意这里指的是栈,
返回
指向堆内存的指针是可以的)。 下面以
函数
返回
局部
变量的指针举几个典型的例子来说明: #incl
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章