问题:通过 const 引用而不是简单地通过值传递整数类型是否有好处。
即。
void foo(const int& n); // case #1
对比
void foo(int n); // case #2
对于用户定义的类型,答案很明确,案例 #1 避免了不必要的复制,同时确保了对象的常量性。但是在上面的例子中,引用和整数(至少在我的系统上)是相同的大小,所以我无法想象函数调用需要多长时间(由于复制)。但是,我的问题确实与内联函数的编译器有关:
对于非常小的内联函数,编译器是否必须在情况 #2 中复制整数?通过让编译器知道我们不会更改引用,它可以内联函数调用而无需不必要地复制整数吗?
欢迎提出任何建议。
最佳答案
通过 const ref 传递一个内置的 int 类型实际上是一个次要的反优化(通常)。至少对于非内联函数。编译器可能必须实际传递一个必须取消引用才能获取值的指针。您可能认为它总是可以优化这一点,但别名规则和支持单独编译的需要可能会迫使编译器采取行动。
但是,对于您的次要问题:
For very small inline functions, will the compiler have to make a copy of the integer in case #2? By letting the compiler know we won't change the reference can it inline the function call without needless copying of the integer?
如果语义允许,编译器应该能够优化掉复制或取消引用,因为在那种情况下,编译器完全了解调用站点的状态和函数实现。它可能只是将值加载到寄存器中,并在完成参数后将寄存器用于其他用途。当然,这一切都非常依赖于功能的实际实现。
关于c++ - 通过 const ref 传递整数类型有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1727569/