请看代码:
void func(const int *& p)
{...}
请问这个参数是啥?首先肯定是对 指针的一个引用。那 const 是针对谁的 const?
我们定义一个左值传入试试:
int t = 10; int *p = &t; func(p);//error!
用普通指针作为实参,直接就报错了:
binding reference of type 'const int*&' to 'int*' discards qualifiers
但是把 p 改成 const 的就行了
int t = 10; const int *p = &t; func(p);//ok!
由此可见,func 的参数是对 const指针(指向常量的指针) 的引用!为了进一步验证,可以让func 改变这个指针:
果然可行。
那么,普通指针 与 const指针 类型不同故而不能被引用。可不可以用 const_cast 转换普通指针使其可以被 func 引用呢?不行!因为 类型转换后产生了右值,无法传给左值引用。就算使用右值引用,也失去了这个函数原本的目的。
那咋办??我们原本只需将参数定义为const引用或const指针,它们既能指向const对象,又能被非const的对象使用。但是现在这个 func 就不行了,根本原因是引用的类型的要求更高,不能类型转换。—— 我是想不出办法咯!
要是有老哥看到这个博客,请教一下,该怎么做啊?



