编辑
如MM所评论,原型中的参数const
被忽略。原始答案的编辑源(如下所示)显示:
float correct(float const value);
float erroneous(float const value);
float changer(float value);
float correct(float value) {
return -value;
}
float erroneous(float value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
没有错误信息。
无论如何,我会保留原件,希望对您有所帮助。
原版的
将const
在参数使得这个参数只读在函数内部。
例如:
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
没有错误消息,该源将无法编译。
该函数correct()
将读取给定值,更改其符号,然后返回取反的值。
该函数erroneous()
看起来实际上是一样的,只是对参数进行了赋值。但是由于参数是const
不允许的。
接下来,该函数changer()
将与以前一样工作,但不会出错。
让我们看一下呼叫站点:
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
变量f
作为参数给出将被复制到参数value
。即使changer()
被调用,它也永远不会改变。
您可能希望将参数视为某种局部变量。实际上,它们在生成的机器代码中大多是这样处理的。
那么,为什么const
有时看到?如果将指针定义为参数,则会看到它。
当您不想更改所指向的值时,需要添加const
; 但是要放在正确的位置!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
const
这里是多余的,您的意念正在发生什么?