【发布时间】:2015-12-25 08:38:03
【问题描述】:
为了使描述更具体,请参见以下来自 C++ Primer 4th edition 的代码:
class Sales_item {
public:
Sales_item(const std::string &book = "")
: isbn(book), units_sold(0), revenue(0.0) {}
Sales_item(std::istream &is);
//as before
}
Sales_item item;
item.same_isbn(cin);
书上说这段代码通过使用构造函数将cin隐式转换为Sales_item,构造函数创建一个(临时的)Sales_item对象通过读取标准输入。
那么,临时对象什么时候被销毁,在这种情况下使用隐式转换是否有害?
【问题讨论】:
-
离开
Sales_item::same_isbn后的某个时间点。如果没有记错的话,C++ 标准对于确切的时刻有点模糊。除非您将对该对象的引用存储在same_isbn中(无论如何您都不应该这样做),否则没有问题。 -
取决于函数是否采用对象或引用。如果它需要引用,则临时对象至少会持续到
same_isbn的执行结束。 -
same_isbn是什么?您的代码示例应显示此
标签: c++ constructor temporary-objects