gpt4 book ai didi

C++ RVO : when it happens?

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:42 27 4
gpt4 key购买 nike

http://coliru.stacked-crooked.com/a/c795a5d2bb91ae32

#include <iostream>
struct X {
X(const char *) { std::cout << 1; }
X(const X &) { std::cout << 2; }
X(X &&) { std::cout << 3; }
};
X f(X a) {
return a;
}
X g(const char * b) {
X c(b);
return c;
}

int main() {
f("hello"); // 13
g("hello"); // 1
}

函数f(X a)的最后一行有什么区别吗:return a; 而不是 return std::move(a);?

函数 f 没有 RVO 而 g 有 NRVO 是真的吗?

最佳答案

Is there any difference in the last line of function f(X a): return a; instead of return std::move(a);?

没有。 a 是函数的局部变量,所以 return a 可以从它 move 。

Is it true that function f doesn't have RVO but g has NRVO?

正确。命名省略从不应用于函数参数;它仅适用于不是函数参数的局部变量。

关于C++ RVO : when it happens?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com