临时变量(Temporaries)是编译器在计算表达式时所构造的变量。它与普通的对象相同,只是它由编译器控制,而不受程序员的控制而已。
临时对象在产生时并不调用构造函数,但在销毁时会调用析构函数。我个人的理解是:临时对象是对已有对象的复制,不会产生无效值,因为已有对象已经调用过构造函数了。为了效率,临时对象没有必要再调用一次构造函数。但析构不同,必须调用以释放一些资源。
补充:临时对象调用的是复制构造方法A(const A&),A为类名。
书上说临时变量应该是常量(const型),但好像并不是如此。或许常量只是一个建议,但并不一定实行。
class X{};
X f() {return X()}
void g1(X&) {}
void g2(const X&){}
main()
{
g1(f()); //书上说会编译错误,但我在VC上通过编译,且没有警告
g2(f()); //成功
}
评论