【问题标题】:Clarification regarding reference to pointer关于指针引用的说明
【发布时间】:2019-06-11 11:18:53
【问题描述】:

我试图传递对指针的引用,主要有两种情况:

  1. const int* &ref_var - ref_var 是对指向常量整数的指针的引用。
  2. 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
}

尽管传递的参数是 non-const 指向 int 的指针,但它工作正常。

你能告诉我哪里出错了。

【问题讨论】:

    标签: c++ pointers reference


    【解决方案1】:

    这是两种不同的类型,指向int 的指针不是指向const int 的指针。是的,指向int 的指针可以转换为指向const int 的指针。

    这里的问题是有一个额外的间接级别,即引用。所以你有一个int*的引用。目标不同于对const int* 的引用。

    这类似于拥有char*,获取指向它的指针并尝试将其传递给const char**。它也会失败,因为内部类型不同。

    是的,这可能很烦人。唯一的选择是在获取对它的引用之前设置正确的类型,因此p 必须是const int*

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 2014-09-08
      • 2016-06-09
      • 1970-01-01
      相关资源
      最近更新 更多