c-void foo中的const(const int a)做什么



对于必须通过引用传递给函数的指针或结构,我确实理解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)。

最新更新