【问题标题】:meaning of const int* const fun(const int* const& p) const;const int* const fun(const int* const& p) const 的含义;
【发布时间】:2015-07-16 19:48:00
【问题描述】:
const int* const fun(const int* const& p) const;

我试图弄清楚这个给定函数原型的输入参数。我在这两个之间争论,不知道哪个是正确的。

  1. 输入是一个 const 引用,它指向一个 const int 指针。因此引用是常量,指针是常量,但它指向的值是可以改变的。
  2. 输入是对指向常量整数的 const int 指针的 const 引用。

【问题讨论】:

标签: c++ constants pass-by-reference


【解决方案1】:

const int* const& P

P 是对常量指针的引用(不是常量引用,因为引用始终是常量),它指向常量整数。

第一个常量用于整数,第二个常量用于指针(不是引用)。传递常量指针的引用是没有意义的,因为它无论如何都是常量。

【讨论】:

    【解决方案2】:

    输入是一个 const 引用,它指向一个 const int 指针。因此引用是常量,指针是常量,但是它指向的值是可以改变的。

    不正确。参数p 不能更改为指向不同的对象。 p指向的对象的值也不能更改。

    输入是对指向常量整数的 const int 指针的 const 引用。

    有点。

    p 是对指向 const 整数的 const 指针的引用。

    【讨论】:

      【解决方案3】:

      p 是对指向 const int 的 const 指针的引用。

      引用本身并不是const——“const 引用”只是对 const 对象的引用。因此,“对指向 const int 的指针的 const 引用”将被理解为相同的意思。

      【讨论】:

        【解决方案4】:

        您所拥有的是对指向常量整数的常量指针的引用。

        【讨论】:

          【解决方案5】:

          输入是对指向 const 整数的 const 指针的引用。

          const int* const& p
          

          第一个 const 表示 int 对象本身是常量,不能更改。第二个 const 表示该 int 上的指针无法更改。然后你会看到它是一个参考。您可以再添加一个 const 作为参考,它会编译。像这样:

          const int* const& const p
          

          【讨论】:

          • 引用不能被 const 指定,因为可变引用不存在。
          • @Quentin 是的,它们不存在,但这也可以编译,至少在 msvc 上:) 虽然那是无稽之谈
          猜你喜欢
          • 2010-11-11
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多