首页 新闻 会员 周边

C++primer中关于返回局部变量问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-06-05 20:17

第七章中 Sales_data接口函数---add

#ifndef CP5_ex7_06_h
#define CP5_ex7_06_h

#include <string>
#include <iostream>

struct Sales_data {
    std::string isbn() const { return bookNo; };
    Sales_data& combine(const Sales_data&);
    
    std::string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
};

// member functions.
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}

// nonmember functions
std::istream &read(std::istream &is, Sales_data &item)
{
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = price * item.units_sold;
    return is;
}

std::ostream &print(std::ostream &os, const Sales_data &item)
{
    os << item.isbn() << " " << item.units_sold << " " << item.revenue;
    return os;
}

Sales_data add(const Sales_data &lhs, const Sales_data &rhs)
{
    Sales_data sum = lhs;
    sum.combine(rhs);
    return sum;
}

#endif
View Code

为什么返回函数内的变量 sum

---实际运行也完全没问题。

 

可能问题比较low,但有点混乱了。

谢告知。thx

c++
Nooooooo的主页 Nooooooo | 初学一级 | 园豆:192
提问于:2015-06-05 17:34
< >
分享
最佳答案
1

确实,你的题目跟你的问题内容都对不上,我反复读了下,才想明白你其实想问的是:

局部变量 sum 出了作用域后就销毁了,为什么调用方还能得到正确的结果?

答:因为不是返回的变量 sum,而是返回的变量 sum 的拷贝。

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2015-06-05 18:08

噢!顿时明白了!thx~    谢谢

Nooooooo | 园豆:192 (初学一级) | 2015-06-05 20:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册