考虑以下两个函数:
void f(int n);
void f(int const n);
从编译器优化的角度来看,后者似乎比前者更好。
然而,从来电者的角度来看,
int const n
比int n
有更多无用信息和更多精神负担。
哪种做法更好?
TLDR:实际上,这样做的性能优势为零。 使用 const 是为了清晰和可读性,而不是性能。
由于函数参数上的
const
甚至不是函数签名的一部分,
无论您的 ABI 如何,这两个函数都将具有完全相同的调用约定。这意味着呼叫者的利益为零。
在函数本身内部,
const
对编译器也没有多大帮助。
任何有价值的编译器都可以自行判断您是否正在修改n
。
可以构造病态的情况,其中
const
could 允许编译器假设某些事情。
例如,我们将 n
作为(非常量)指针传递给的嵌套函数调用不会修改它。
这可以允许编译器更好地进行存储->加载转发并避免溢出到堆栈。就目前情况而言,编译器似乎甚至没有利用这一点(https://godbolt.org/z/jGsKo56aG)。