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

Arn*_*shn 39 c++ pointers reference

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

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

我想知道在哪种情况下优先于另一种情况.他们的C++标准及其实现有何不同?

干杯

Bri*_*ndy 51

const指针有3种类型:

//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;
Run Code Online (Sandbox Code Playgroud)

上面的方法#2与参考最相似.

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

  • 此外,引用是对象的_alias_.这意味着可以在不解除引用的情况下使用引用(原谅令人困惑的术语). (3认同)

Tro*_*nic 7

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

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


the*_*ess 6

当你应该使用每个:

reference:默认使用这些.人们通常取消引用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 );
}
Run Code Online (Sandbox Code Playgroud)


Gau*_*ngh 5

几乎所有要点都已被其他答案涵盖,除了这一重要的一点:可以对指针进行算术运算,但不能对引用进行算术运算。例如

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