请你说说C++如何处理返回值?
copy elision/rvo/nrvo被你吃了?
按值返回的对象,会直接在调用方栈上构造,省略一次复制/移动(哪怕复制/移动构造函数有副作用)。比方说
vector<int> make_some_vector(); int main() { auto vec = make_some_vector(); }
正常情况下make_some_vector
所返回的vector
会直接在main函数栈的vec
具有的栈空间上构造。
另一种情况是make_some_vector().push_back(114514)
,这时函数返回的值其类型是prvalue,因访问了成员被转换成xvalue,这个xvalue才是实际所谓的临时变量