在Exceptional C ++中,第10项,它谈论使用临时(如果你有书,第35页的顶部“......即,将返回的临时副本复制到目的地”)。
代码是
template<class T>
T Stack::<T>::Pop()
{
...
T result = ...
return result;
}
...
string s1(s.Pop());
我不清楚在哪里以及为什么要创造临时性。
当你从一个函数返回一个对象是一个临时的总是创建?为什么以及它的范围是什么? 在这种情况下,s1是复制构造的,大概是从临时的?为什么不能从函数中的结果对象构造它?
TIA
-------编辑--------- 我觉得我很困惑,因为这本书正在使用术语副本,并且它使用它与操作的含义,而我认为它意味着重复。 一般而言,Verr是一本很好的清晰书籍,但这个特别的段落可能并不是那么清晰。
答案 0 :(得分:2)
函数的未命名返回值是临时值。它被创建为函数的返回值,然后传递给string
的复制构造函数,然后立即销毁。
答案 1 :(得分:1)
返回值是临时创建的。一些编译器实现了一个名为return value optimization的东西,它避免了额外的拷贝构造。
请注意,T result = ...
行还会在原始文本中创建副本。