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指针之间存在关键差异:
Const指针可以为NULL.
引用没有自己的地址,而指针则有.
引用的地址是实际对象的地址.
指针具有自己的地址,并将其指向的值的地址保存为其值.
我假设你的意思是一个const值指针(例如int*const ptr),而不是指向const的指针(例如int const*ptr).
当你应该使用每个:
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)
几乎所有要点都已被其他答案涵盖,除了这一重要的一点:可以对指针进行算术运算,但不能对引用进行算术运算。例如
int a[3] = {39, 18, 97};
int * const b = a;
int c = *(b+1); // sets c = 18
Run Code Online (Sandbox Code Playgroud)