我确实理解const
对于必须通过引用函数传递的指针或结构的含义。但是在示例中:
void foo(const int a);
变量a
在堆栈上传递。调用者修改堆栈内容没有坏处,因此const
在这种情况下看起来很无用。
此外,如果我无法修改a
,我仍然可以复制一份并更改此副本:
void foo(const int a)
{
int b = a;
b++;
}
在应用于标量函数参数(不是指针)时,const
关键字在哪种情况下才有用?
答案 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()
。)