| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1152 人关注过本帖
标题:关于函数返回到底是值还是引用
只看楼主 加入收藏
大爱CATs
Rank: 4
来 自:重庆
等 级:业余侠客
威 望:3
帖 子:108
专家分:250
注 册:2015-1-13
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:3 
关于函数返回到底是值还是引用
注意重载的+运算符,这里我返回的是引用(按道理这里应该是不能返回引用的),但是为什么s3的结果却能正确打印?
在完成+运算之后,函数内部的变量不是会被释放吗?为什么s3的取值正确?
程序代码:
#include <iostream>
#include <string>

using namespace std;

class Stone {
    friend Stone& operator + (const Stone& s1, const Stone& s2);
public:
    Stone(int weight = 0) { this->weight = weight; }
    int getWeight() const { return weight; }
private:
    int weight;
};

Stone& operator + (const Stone& s1, const Stone& s2) {
    // Stone temp;
    // temp.weight = s1.getWeight() + s2.getWeight();
    return Stone(s1.getWeight() + s2.getWeight());
}

int main() {
    Stone s1(1);
    Stone s2(2);
    Stone s3;

    s3 = s1 + s2;
    cout << s3.getWeight() << endl;
    cout << s3.getWeight() << endl;
    cout << s3.getWeight() << endl;
}


[此贴子已经被作者于2021-4-15 23:13编辑过]

搜索更多相关主题的帖子: 返回 函数 const int 引用 
2021-04-15 23:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
但是为什么s3的结果却能正确打印?
因为你这属于“未定义行为”。
“未定义行为”什么都不保证,既不保证一定正确,当然也不保证一定错误。
2021-04-16 08:25
大爱CATs
Rank: 4
来 自:重庆
等 级:业余侠客
威 望:3
帖 子:108
专家分:250
注 册:2015-1-13
收藏
得分:0 
回复 2楼 rjsp
多谢您 我明白了

弹指一挥间
2021-04-16 10:11
Potheads
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2021-4-14
收藏
得分:10 
2021-04-16 14:22
快速回复:关于函数返回到底是值还是引用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017374 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved