【发布时间】:2014-02-19 00:00:41
【问题描述】:
就是这样,
我尝试调查以下实现功能的一些优点/缺点:
void foo(const int a, const int b)
{
...
}
具有通用函数原型,用作API,并包含在头文件中,如下所示:
void foo(int a, int b)
我在以下问题中发现了关于这个主题的大量讨论:
我同意 rlerallut 的回答,他说的是自记录代码以及对代码安全性的角度有点偏执。
但是,这就是问题所在,有人在那里写道,将const 用于传递给函数的常用参数可以带来一些优化好处。我的问题是有人有真实的例子来证明这种说法吗?
【问题讨论】:
-
这个答案基本上与
const指针有关,我实际上并没有考虑过。我不知道这个答案是否可以应用于按值传递的普通参数。我也发现这个答案有点令人困惑,特别是有一种说法是抛弃const指针并在本地范围内修改它的值不是UB,但对全局范围做同样的事情是 UB。有一条评论指出了这种不一致,但我想没有考虑到这一点。 -
常量值参数的好处是它可以防止编码人员无意中修改它。如果它对优化器有帮助,那将太少注意到,优化器本身只在一种非常特殊类型的代码中帮助你——在你的代码中(而不是在库中)紧密的 CPU 循环,你花费了很大一部分时间。许多人认为这在任何地方都是一件好事,但实际上它只对那些程序计数器喜欢隐藏的小代码壁橱有帮助。它在其余代码中为您所做的就是让调试变得更加困难。
-
任何“现实生活中的示例”都将特定于特定的编译器,我认为这不是您想要的。一个好的编译器可以自己发现一个参数永远不会被改变和优化,
const与否。在函数参数上使用const的更好理由是它可以保护您免受某些类型的编程错误。 -
不,我不认为你应该注意到差异......因为,正如我所说,一个体面的优化器应该能够在没有提示的情况下做正确的事情。
标签: c optimization constants c99