何时使用常量*与常量*康斯特



我见过人们使用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变量会发生这种情况),编译器就越能更好地优化。

最新更新