我见过人们使用const作为函数参数的代码。使用 const* 与 const * const 有什么好处?这可能是一个非常基本的问题,但如果有人能解释一下,我将不胜感激。
Bool IsThisNumberEqualToFive(int const * num)
{
return(Bool)(5 != num );
}
Bool IsThisNumberEqualToFive(int const * const num)
{
return(Bool)(5 != num );
}
- 在第一个版本中,您承诺不会写信给
num
指向的对象 - 在第二个版本中,您承诺这一点,并且还可以防止自己(即IsThisNumber..)从
num
指向其他东西。
也就是说,在第二个版本中,指针本身也是const
的,除了 pointee。
对于参数
int const * num // num is a pointer to const int.
康斯特正在保护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
来更改该对象。
源代码越是提前告诉编译器变量值会发生什么(或者更好的"不会发生",因为const
变量会发生这种情况),编译器就越能更好地优化。