社区
C++ 语言
帖子详情
函数返回静态局部对象引用问题
待续_1006
2017-04-07 10:17:54
看图就可以了,已经描述的很清楚了
为什么B1,B2,B3中的num不相等,他们不都是同一静态局部对象的别名吗?
...全文
152
3
打赏
收藏
函数返回静态局部对象引用问题
看图就可以了,已经描述的很清楚了 为什么B1,B2,B3中的num不相等,他们不都是同一静态局部对象的别名吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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分...
Self Summary: C++
函数
返回
引用
和指针的
问题
,
局部
对象
与new
对象
的
问题
C++的
局部
对象
的概念: 作用域在
局部
范围内(例如
函数
)的
对象
。这样的
对象
可以把
对象
的
引用
或者指针存在栈中,随着
函数
的结束而销毁,而把创建的
对象
内容存在堆中。如果需要在堆上创建
对象
,要么使用new运算符,要么使用malloc系列
函数
。 而关键是理解好“自动存储”的概念[1]: Object obj; 此时,obj是在栈上分配的吗? 要回答这个
问题
,我们首先要理解这个语
C++类成员
函数
返回
对象
及
返回
引用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C++类
函数
返回
类的
对象
及类的
引用
一、代码例题二、
返回
引用
三、
返回
对象
一、代码例题 #include <iostream> using namespace std; class machine; ostream& operator<<(ostream& o,const machine& m); class machine { private: int num; public:
函数
返回
局部
变量
问题
一般的来说,
函数
是可以
返回
局部
变量的,但是要注意几种情况。
局部
变量的作用域只在
函数
内部,在
函数
返回
后,
局部
变量的内存已经释放了。因此,如果
函数
返回
的是
局部
变量的值,不涉及地址,程序不会出错。但是如果
返回
的是
局部
变量的地址(指针)的话,程序运行后会出错。因为
函数
只是把指针复制后
返回
了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,
函数
不能通过
返回
指...
C++ 语言
64,641
社区成员
250,579
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章