查询临时对象

时间:2011-01-20 19:39:56

标签: c++

在Exceptional C ++中,第10项,它谈论使用临时(如果你有书,第35页的顶部“......即,将返回的临时副本复制到目的地”)。

代码是

template<class T>
T Stack::<T>::Pop()
{
...
T result = ...
return result;
}

...


string s1(s.Pop());

我不清楚在哪里以及为什么要创造临时性。

当你从一个函数返回一个对象是一个临时的总是创建?为什么以及它的范围是什么? 在这种情况下,s1是复制构造的,大概是从临时的?为什么不能从函数中的结果对象构造它?

TIA

-------编辑--------- 我觉得我很困惑,因为这本书正在使用术语副本,并且它使用它与操作的含义,而我认为它意味着重复。 一般而言,Verr是一本很好的清晰书籍,但这个特别的段落可能并不是那么清晰。

2 个答案:

答案 0 :(得分:2)

函数的未命名返回值是临时值。它被创建为函数的返回值,然后传递给string的复制构造函数,然后立即销毁。

答案 1 :(得分:1)

返回值是临时创建的。一些编译器实现了一个名为return value optimization的东西,它避免了额外的拷贝构造。

请注意,T result = ...行还会在原始文本中创建副本。