将int重新分配给const int?

时间:2012-02-24 17:38:58

标签: c const

我正在阅读C代码库,我发现了一个类似于以下内容的代码段:

void foo(int bar) {
    const int _bar = bar;
    ...
}

然后,作者在其余代码中使用_bar。为什么这样做?这是一种优化,还是有其他原因?

3 个答案:

答案 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的最后一句而合法。