首页 > 试题广场 >

请你说说C++如何处理返回值?

[问答题]

请你说说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才是实际所谓的临时变量

发表于 2019-08-28 10:11:47 回复(0)