【发布时间】:2019-10-06 22:49:18
【问题描述】:
C++ 核心指南指出
F.20:对于“输出”输出值,首选返回值而不是输出 参数
但随后给出以下异常:
struct Package { // exceptional case: expensive-to-move object
char header[16];
char load[2024 - 16];
};
Package fill(); // Bad: large return value
void fill(Package&); // OK
不应该是返回值优化的情况吗?在这种情况下是否可以防止 RVO?或者仍然不如通过引用有效?还是有些编译器做不到?
更一般地说,我什么时候应该依赖像传递引用技术一样高效地优化返回值的编译器?
【问题讨论】:
标签: c++ compiler-optimization c++20 rvo