这两段代码有什么区别吗? (临时变量)

时间:2014-07-17 08:17:55

标签: c++ constructor

这两段代码之间有什么区别吗?

CPoint temp(x,y);

some_func(temp);

some_func(CPoint(x,y));

2 个答案:

答案 0 :(得分:2)

是的,在第一种情况下,temp var将在范围结束前销毁。在第二种情况下它将是。

如果函数some_func()将非const引用作为参数,则第二个将不会编译,因为您无法引用将立即销毁的内容(当some_func返回时)。

在第一种情况下,如果您的some_func()函数接受引用,您应该知道temp变量只会在当前作用域结束之前存在。

答案 1 :(得分:2)

CPoint对象的生命周期是不同的。

在第一种情况下,一个名为' temp'的变量被建造。在退出声明的范围之后,它才会被销毁。

在第二种情况下,创建一个真正的临时值并传递给该函数,一旦some_func返回,该函数将被销毁。

相关问题