[英]Reference to function return value
举个例子:
#include <string>
std::string Foo() {
return "something";
}
std::string Bar() {
std::string str = "something";
return str;
}
我不想复制返回值,这两个选项之间哪个更好? 又为什么呢?
int main() {
const std::string& a = Foo();
std::string&& b = Foo();
// ...
}
如果我现在使用Bar函数(而不是Foo),上面编写的main()之间是否有一些区别?
int main() {
const std::string& a = Bar();
std::string&& b = Bar();
// ...
}
这两个选项之间哪个更好?
都不行 这是过早优化的一种练习。 您正在尝试为此执行编译器工作。 现在,返回值优化和复制消除实际上已成为法律。 移动语义(适用于std::string
类的类型)已经提供了真正有效的后备。
因此,让编译器执行其操作,并首选值语义:
auto c = Foo();
auto d = Bar();
至于Bar
vs Foo
。 使用您喜欢的任何一种。 Bar
尤其是RVO友好的。 因此,两者最终很有可能会一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.