关于指针引用的澄清

3
我试图传递指向指针的引用,主要有两种情况:
1. `const int* &ref_var` - `ref_var` 是一个指向常量整数的指针的引用。 2. `int *const &ref_var` - `ref_var` 是一个指向整数的常量指针的引用。
现在第二种情况可以正常工作,因为我不能修改指针本身,但在第一种情况下,我收到了一个错误消息,我认为不应该出现这个错误,因为一个非常量指针变量可以作为参数传递给具有常量指针参数的函数。
代码如下:
#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
}

尽管传递的参数是一个非const指向整数的指针,它仍然可以正常工作。

请问您能告诉我哪里出了问题吗?

1个回答

3
这是两种不同的类型,指向int的指针不是指向const int的指针。是的,指向int的指针可以转换为指向const int的指针。
问题在于多了一个间接级别,即引用。因此,您有一个指向int*的引用。它的目标与引用const int*不同。
这就像有一个char*,获取一个指向它的指针并尝试将其传递给const char**一样。它也会失败,因为内部类型是不同的。
是的,它可能很烦人。唯一的选择是在获取引用之前设置正确的类型,因此p必须是const int*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接