在C++中,如果:
int a = 3;
int* p = &a;
那么为什么是这样呢?
const int* &pp = p;
不允许,但是
const int* const &pp = p;
被允许吗?
const int* &pp = p;
,首先需要将 p
隐式转换为 const int*
。但是转换后的 const int*
是一个临时值,不能绑定到非const左值引用(如 const int* &
)上。
临时值可以绑定到const左值引用(如 const int* const &
)(和右值引用),所以 const int* const &pp = p;
可以正常工作。临时值的生命周期延长到引用 pp
的生命周期。
const int x;
int* p;
const int** q = &p;
*q = &x;
*p = 3;
p
指向x
(因为*q
是p
),所以*p = 3
会修改x
,即使x
是const
。const
限定符时,您必须全盘接受或全部放弃。