const之间的区别。指针和参考?

时间:2010-02-25 17:40:14

标签: c++ reference pointers

常量指针和引用有什么区别?

顾名思义的常量指针不能再绑定。参考的情况也是如此。

我想知道哪种情况比另一种情况更受欢迎。他们的C ++标准及其实现有何不同?

欢呼声

5 个答案:

答案 0 :(得分:48)

有三种类型的const指针:

//Data that p points to cannot be changed from p
const char* p = szBuffer;

//p cannot point to something different.  
char* const p = szBuffer;

//Both of the above restrictions apply on p
const char* const p = szBuffer;

上面的方法#2与参考文献最相似。

上面的引用和所有3种类型的const指针之间存在关键差异:

答案 1 :(得分:6)

我假设你的意思是一个const值指针(例如int * const ptr),而不是指向const的指针(例如int const * ptr)。

  • 不初始化引用是编译错误(避免未初始化指针的问题)
  • 指针也可以指向一个数组,或者它可以是NULL,其中引用总是指一个对象。
  • 语法非常不同

答案 2 :(得分:6)

何时应该使用每个:

<强>参考: 默认使用这些。人们通常取消引用NULL指针是很常见的。您可以通过参考来消除这种风险。

const指针: 当你想要一个参考,但不能一个。例如,您正在编写驱动程序,并且您想要一个指向内存映射开头的指针。在这种情况下,引用并没有那么多意义。此外,如果你需要一个数组的东西,引用将不起作用(虽然一组简单的类与引用成员将)。

在下一个示例中,const指针检查引用无法检查的错误:

int addFour( int* register ){
  if(isNull(arg)){
    throw NullPointerException();
  }  

  // some stuff
  *register += 4;

  return register;
}

// This could be any function that does pointer math.
bool isNull(const int* ptr){
  return( NULL == ptr );
}

答案 3 :(得分:2)

除了这个重要的答案之外,其他答案几乎涵盖了所有要点: 可以对指针进行算术运算,但不能参考。 E.g。

int a[3] = {39, 18, 97};
int * const b = a;
int c = *(b+1);  // sets c = 18

答案 4 :(得分:0)

一些差异:

const指针可以指向NULL。

const点可以指向一个对象数组。

通过丢弃constness,可以再次绑定const指针