第七章中 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
为什么返回函数内的变量 sum
---实际运行也完全没问题。
可能问题比较low,但有点混乱了。
谢告知。thx
确实,你的题目跟你的问题内容都对不上,我反复读了下,才想明白你其实想问的是:
局部变量 sum 出了作用域后就销毁了,为什么调用方还能得到正确的结果?
答:因为不是返回的变量 sum,而是返回的变量 sum 的拷贝。
噢!顿时明白了!thx~ 谢谢