在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 *是一个临时的
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的lvalue-reference(比如const int *&).临时可以绑定到对const的lvalue-reference(比如const int * const&)(和rvalue-reference),所以const int * const& pp = p;工作良好.临时的生命周期延长到参考pp的生命周期.