我试图通过指向指针的引用,主要有两种情况:
const int* &ref_var
- ref_var 是对常量整数的指针的引用。 int *const &ref_var
- ref_var 是对整数的常量指针的引用。现在,第二种情况可以正常工作,因为我无法修改指针本身,但是在第一种情况下,我收到一条错误消息,由于 non-const 指针变量,我认为该消息不应该存在可以将 constant 指针作为参数传递给函数。
代码:
#include<iostream>
using std::cout;
using std::endl;
void fun(const int* &ref_var) //error: invalid initialization of reference of type const int*& from expression of type int*
{
//BLANK
}
int main()
{
int x=9;
int *p=&x; //ERROR VANISHES IF P IS DECLARED AS POINTER TO CONSTANT INT
fun(p);
return 0;
}
函数fun
声明为:
void fun(const int *ptr)
{
//BLANK
}
尽管传递的参数是指向int的 non-const 指针,它仍然可以正常工作。
你能告诉我我要去哪里了吗
答案 0 :(得分:2)
这是两种不同的类型,指向int
的指针不是指向const int
的指针。是的,指向int
的指针可以转换为指向const int
的指针。
这里的问题是,还有一个附加的间接级别,即引用。因此,您有对int*
的引用。目标不同于对const int*
的引用。
这类似于拥有一个char*
,获取指向它的指针并尝试将其传递给const char**
。由于内部类型不同,它也会失败。
是的,这可能很烦人。唯一的选择是在获取对它的引用之前设置适当的类型,因此p
必须是const int*
。