
[英]Is there any downside of declaring function parameter as const pointer to const
[英]why declaring function parameter as “X* const”
让我们考虑一下这样的应用:
void foo (char* const constPointerToChar) {
// compile-time error: you cannot assign to a variable that is const
constPointerToChar = "foo";
}
int _tmain(int argc, _TCHAR* argv[])
{
char* str = "hello";
foo(str);
printf(str);
return 0;
}
让我们删除const
关键字:
void foo (char* pointerToChar) {
pointerToChar = "foo";
}
int _tmain(int argc, _TCHAR* argv[])
{
char* str = "hello";
foo(str);
printf(str);
return 0;
}
输出是hello
。 因此,即使允许函数更改指针,它也会更改指针的副本,并且不会更改原始指针。
这是预期的,因为指针是按值传递的。
我明白为什么事情会这样,但我不明白为什么有人需要将参数声明为X* const
。
当我们将函数参数声明为X* const
我们会说“好吧,我在我的函数中保证,我不会修改我自己的指针副本。” 但是为什么调用者应该关心他从未见过和使用的变量会发生什么?
我是否正确声明函数参数为X* const
是无用的?
但是为什么调用者应该关心他从未见过和使用的变量会发生什么?
他没有。 实际上,您可以将该const
保留在const
的声明之外,并且只将它包含在实现中。
我是否正确声明函数参数为
X* const
是无用的?
不,它与声明任何其他局部变量const
一样有用。 读取函数的人会知道指针值不应该改变,这可以使逻辑更容易理解; 没有人可以在不应该的时候通过改变它来意外地打破逻辑。
顶级限定符将在函数声明中被丢弃(因此它不参与函数签名),但将在函数定义中强制执行。
有一些编码标准建议你应该将值参数作为const
(并返回const
值),以避免对参数进行可能不需要的修改。 我不完全同意这个理由,但确实如此。
const
有两个一般效果:
mutable
,因此调用该函数的程序员知道该函数不会更改其变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.