【问题标题】:return a read-only pointer from the int pointer in C++从 C++ 中的 int 指针返回一个只读指针
【发布时间】:2013-05-09 00:02:52
【问题描述】:

我在一项任务中被要求实现 IntList,它是动态 int 数组列表,其私有成员为“int *p”。实现所有方法(添加、查找、删除等)后,我不知道如何实现返回的公共方法:

  • 获取指向底层数组的只读指针。

如何返回具有 *p 个数字的指针,其内容不能更改?

【问题讨论】:

  • 阅读const关键字

标签: c++ pointers constants


【解决方案1】:

你需要编写类似下面的代码:

class A {
    int *tab;

public:
    A() {
        tab = new int[3];
        tab[0] = 1;
        tab[1] = 4;
        tab[2] = 6;
    }

    const int * get() {
        return tab;
    }
};

int main() {
    A *a = new A();
    //(a->get())[0] = 2;
}
  • 然后您将能够看到表格的内容,但无法在类之外更改它的值。

  • 试图取消注释最后一行将导致得到这个 错误:分配只读位置'* a->A::get()' :)

【讨论】:

  • 别忘了在 A 的析构函数中释放选项卡,否则会泄漏内存!另请注意,指向选项卡的指针将在 A 被销毁后悬空。这应该足够了:~A() { delete[] tab; }
【解决方案2】:

您必须在方法签名中使用const 关键字来告诉编译器返回的内容是常量或不可修改的。由于您要返回一个指针,因此您还必须弄清楚如何区分“无法修改的指针”和“指向无法修改的数据的指针”,以及如何指定哪个想要。

【讨论】:

  • 我认为我需要“指向无法修改的数据的指针”,并尝试一切 atm 但我仍然可以更改方法结果。
【解决方案3】:

你声明一个指向常量类型的指针,像这样

type const * 

因此,返回指向 const 类型的指针的成员函数声明如下所示

type const * memberfunction();

用您返回的任何类型替换单词类型。

您返回的内容不能更改,因为它是 const。所以它不能出现在赋值运算符的左侧,即 = ;并且它不能通过非 const 参数传递给函数或方法,除非你抛弃我一般不推荐的 constsness。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多