我正在阅读C代码库,我发现了一个类似于以下内容的代码段:
void foo(int bar) {
const int _bar = bar;
...
}
然后,作者在其余代码中使用_bar。为什么这样做?这是一种优化,还是有其他原因?
答案 0 :(得分:6)
然后,作者在其余代码中使用_bar。
如果完全使用_bar
而不使用函数参数,我会按const
限定函数参数。
void foo( const int bar )
{
// use bar but modifications to bar itself are not allowed.
}
答案 1 :(得分:4)
据推测,作者这样做是为了避免意外分配。
如果参数与函数输入不变,则作者可以将const放在参数签名中,如void foo (int const bar) { ... }
中所示。
答案 2 :(得分:3)
当C按值传递参数时,
之间没有区别void foo(int bar);
和
void foo(const int bar);
就调用代码而言。
因此, const - 限定非指针参数可以说是内部实现细节是公共API的一部分。
另一个解决方案是在标题中声明没有const
的函数,只将其添加到定义中(正如Oli Charlesworth在评论中所建议的那样),即
// in header file
extern void foo(int bar);
// in source file
void foo(const int bar)
{
// ...
}
这是 - 据我所知 - 由于C996.7.5.3§15的最后一句而合法。