void foo(const int a)中的const是做什么的?

时间:2016-04-12 14:17:01

标签: c const

我确实理解const对于必须通过引用函数传递的指针或结构的含义。但是在示例中:

void foo(const int a);

变量a在堆栈上传递。调用者修改堆栈内容没有坏处,因此const在这种情况下看起来很无用。

此外,如果我无法修改a,我仍然可以复制一份并更改此副本:

void foo(const int a)
{
   int b = a;
   b++;
}

在应用于标量函数参数(不是指针)时,const关键字在哪种情况下才有用?

5 个答案:

答案 0 :(得分:4)

void foo(const int a)这样的代码并不是真正有意义的,也不是“const正确性”。

有时过于迂腐的程序员会得到一个奇怪的想法,他们需要将公共参数声明为const,因为函数不会修改实际参数。但大多数情况下,功能都没有。

关键是,变量是原始的副本,所以你的函数用它做什么并不重要!

所以这甚至不是编写自我记录代码的一种方式,因为它只是告诉调用者你的函数内部发生了什么。来电者不在乎也不应该在乎。

答案 1 :(得分:3)

没有必要将const用作值参数,但如果您想要的是保证代码符合您的意图,则它具有值。

Here这里有一些用例示例的答案

答案 2 :(得分:2)

这意味着函数的实现者不能更改函数通过值接收的输入参数a的值。

它可以提高程序稳定性。

(我个人不喜欢这种风格,因为我发现它太冗长了。)

如果你采用这种风格,那么请注意你只需要将const放在函数定义的参数列表中,你< em>不需要声明

答案 3 :(得分:2)

与声明任何常量变量

是一回事
const int size = some_other_variable + 5;

如果您知道它们的值不会改变,那么将变量声明为const是一种很好的编程习惯。从声明的方式来看,你可以避免有人意外地在功能中进一步改变它们的价值。

答案 4 :(得分:1)

它主要用于自我记录代码。

对于查看源代码的未来人员,const用于强调您的意图({1}}中的所有代码都不应尝试修改foo()。)