【发布时间】:2019-06-12 21:15:21
【问题描述】:
在另一个问题中,一位用户评论说返回 const std::string 会降低移动构造效率并且速度较慢。
是不是真的给这个方法赋值一串return:
const std::string toJson(const std::string &someText);
const std::string jsonString = toJson(someText);
... 确实比非常量版本慢:
std::string toJson(const std::string &str);
std::string jsonString = toJson(someText);
在这种情况下,移动构造效率是什么意思?
我以前从未听说过这种限制,也不记得在分析器中看到过这种限制。但我很好奇。
编辑:有一个建议的问题:What is move semantics?。虽然其中一些解释当然与效率有关,但它解释了 什么 移动语义的含义,但没有解决 为什么 返回 const 值会对性能产生负面影响。
【问题讨论】:
-
你质疑它失去了移动语义,还是质疑它更慢?还是两者兼而有之?
-
看看生成的代码看看。或者使用随机字符串运行几百万次并测量。
-
另外,是否返回
const值并不重要。调用者将结果分配给重要的是什么。 -
返回 const 值是没有意义的。只需按值返回。
-
返回一个 const value(相对于引用)从不 是有意义的。不要这样做。你的编译器甚至应该警告你。