【问题标题】:Returning a reference array from a const member function从 const 成员函数返回引用数组
【发布时间】:2010-09-16 05:56:10
【问题描述】:

如何从 const 成员函数返回数组引用?

class State{
    Chips (&arr() const)[6][7] { return arr_; }
    Chips val() const { return val_; }
}

从“const Chips [6][7]”类型的表达式中对“Chips (&)[6][7]”类型的引用初始化无效

谢谢。

【问题讨论】:

    标签: c++ multidimensional-array reference


    【解决方案1】:

    您的语法是正确的,但如果arr_ 是该类的直接成员(并且很可能是),那么您根本无法返回对该成员的非成本引用。在上述arr 方法中,成员arr_ 被视为具有const Chips[6][7] 类型。您不能使用此类型来初始化 Chops (&)[6][7] 类型的引用,因为它会破坏 const 正确性。为了编译上述内容,您还需要在返回的引用上添加const

    ...
    const Chips (&arr() const)[6][7] { return arr_; }
    ...
    

    但无论如何,使用 typedef 会更好

    ...
    typedef Chips Chips67[6][7];
    const Chips67 &arr() const { return arr_; }
    ...
    

    【讨论】:

    • 预期 ';'在'筹码'之前预期';'在 'const' 之前,我一开始尝试过,但出现上述错误
    • const Chips (&arr() const)[6][7] { return err_; } 与 g++-4.2 完美配合,我看不出该语法有什么问题(除了阅读它的复杂性)。你用的是什么编译器? (反正typedef几乎是可读性的要求)
    【解决方案2】:

    您需要将函数指定为返回 Chips 指针。所以,

    Chips* arr() const;
    

    就是你要找的东西。

    【讨论】:

    • 我没有投反对票,但反对票可能是因为这个答案没有解决问题,也不会编译。返回一个 decayed 指针将是const Chips (*arr() const )[7](我什至不确定那里)。请注意,只有外部数组可以/将自动衰减为指针,因此如果类型为int array[3][4][5],则它是一个 由 3 个数组组成的数组,由 4 个 5 个整数组成的数组,当它衰减时它将是指向 4 个 5 个整数数组的数组的指针。另外,请注意,问题在于成员方法为 const 时,返回的元素也必须为 const ——否则编译器会报错。
    • (1) OP 并不“需要”让函数返回一个指针 (2) 你的“解决方案”不起作用 (3) 这不是 OP 想要的。所以,基本上,这个答案中的一切都是错误的。
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多