Nav*_*een 19 c++ compiler-construction optimization
假设我有一个函数,其中参数通过值而不是const-reference传递.此外,假设在函数内部仅使用该值,即函数不会尝试修改它.在这种情况下,编译器是否能够确定它可以通过const-reference传递值(出于性能原因)并相应地生成代码?是否有任何编译器可以做到这一点?
Joh*_*itb 14
如果传递变量而不是临时变量,则如果复制构造函数执行了运行程序时会发现的任何内容("可观察行为":输入/输出或更改volatile变量),则不允许编译器优化掉副本. .
除此之外,编译器可以自由地执行它想要的任何事情(它只需要像可观察的行为一样 - 如果它根本没有优化的话).
仅当参数是rvalue(大多数临时)时,即使复制构造函数具有可观察的副作用,也允许编译器将副本优化为by-value参数.
只有在未导出函数的情况下,编译器才有可能将call-by-reference转换为call-by-value(或反之亦然).
否则,由于调用约定,函数必须保持call-by-value/reference语义.