在Exceptional C++的第10项中,它讨论了临时的使用(如果你有这本书,在第35页的顶部"...也就是返回到目的地的临时副本“)。
代码是
template<class T>
T Stack::<T>::Pop()
{
...
T result = ...
return result;
}
...
string s1(s.Pop());我不太清楚什么是临时创建的,在哪里创建的,为什么创建的。
当你从一个函数中通过值返回一个对象时,一个临时的总是创建的吗?为什么?它的范围是什么?在这种情况下,s1是复制构造的,大概是从临时的?为什么它不能从函数中的结果对象构造?
提亚
- EDIT -我想我弄糊涂了,因为这本书使用了复制这个术语,它用来表示操作的含义,而我认为它的意思是复制。总体而言,这本书写得很清楚,但这一段可能还不够清楚。
发布于 2011-01-21 03:42:20
函数的未命名返回值是临时的。它被创建为函数的返回值,然后传递给string的复制构造函数,然后立即销毁。
发布于 2011-01-21 03:45:46
返回值是正在创建的临时值。一些编译器实现了一种叫做return value optimization的东西,它避免了额外的拷贝构造。
请注意,T result = ...行还在原始文本中创建了一个副本。
https://stackoverflow.com/questions/4751733
复制相似问题