我见过代码,人们将使用const作为函数的参数。使用const * vs const * const有什么好处?这可能是一个非常基本的问题,但如果有人能够解释,我将不胜感激。
Bool IsThisNumberEqualToFive(int const * num)
{
return(Bool)(5 != num );
}
Bool IsThisNumberEqualToFive(int const * const num)
{
return(Bool)(5 != num );
}
答案 0 :(得分:6)
num
指向num
指向别的东西。也就是说,除了指针对象之外,在第二个版本中指针本身也是const
。
答案 1 :(得分:2)
参数
int const * num // num is a pointer to const int.
const正在保护num
点。程序可以改变num
但不改变*num
的值。而对于
int const * const num // num is a const pointer to const int
最左边const
正在保护num
点,而最右边是保护指针num
自己。在这种情况下,num
和*num
都不会修改。
注意:了解
的内容T const *p; // T is any valid type
意味着(更准确地说)
这意味着,程序可以使用表达式p
来改变p
指定的指针对象的值,但它不能使用表达式*p
来改变任何值*p
可能指定的对象。 如果程序有另一个非限定类型的表达式e
,指定*p
也指定的对象,程序仍然可以使用e
来更改该对象。< / p>
答案 2 :(得分:1)
消息来源越多告诉编译器变量的值会发生什么变化(或者更好的“不发生”,就像const
变量所预期的那样)事先就越好了编译器可以选择。