对于必须通过引用传递给函数的指针或结构,我确实理解const
的含义。然而,在示例中:
void foo(const int a);
在堆栈上传递变量CCD_ 2。修改堆栈的内容对调用者没有害处,因此const
在这种情况下看起来非常无用。
此外,如果我不能修改a
,我仍然可以复制并更改此副本:
void foo(const int a)
{
int b = a;
b++;
}
在哪种情况下,const
关键字在应用于标量函数参数(而不是指针)时会有用?
像void foo(const int a)
这样的代码并没有真正的意义,也不是"常量正确性"。
有时过于迂腐的程序员会有一个奇怪的想法,他们需要将公共参数声明为const
,因为函数不会修改实际参数。但大多数情况下,函数不会。
关键是,变量是原始变量的副本,所以函数对它做什么都无关紧要!
因此,这甚至不是编写自文档代码的一种方式,因为它所做的只是告诉调用者函数内部发生了什么。打电话的人不在乎,也不应该在乎。
没有必要对值参数使用const,但如果您想要保证代码达到您想要的效果,它就有它的值。
这里有一个答案和一些用例示例
这与声明任何常量变量是一样的
const int size = some_other_variable + 5;
如果您知道变量的值不会改变,那么将其声明为const
是一种很好的编程实践。通过这种方式,您可以避免有人意外地在函数的后面更改其值。
这意味着函数的实现者不能按值更改函数接收的输入参数a
的值。
它可以提高程序的稳定性。
(就我个人而言,我不喜欢这种风格,因为我觉得它太冗长了)。
如果采用这种风格,那么请注意,您只需要将const
放在函数定义的参数列表中,不需要它放在声明中。
它主要用于自我记录代码。
对于将来查看源代码的人来说,const
可以强调您的意图(foo()
中的任何代码都不应该试图修改a
)。