如何从C ++函数返回const Float **

我有一个拥有数组“ float ** table ”的类。 现在我想让成员函数返回它,但不希望它在类之外被修改。 所以我这样做了:

class sometable 
{
  public:
   ...
   void updateTable(......);
   float **getTable() const {return table;}
  private:
    ...
    float **table;
}

当我用一个常量对象调用getTable时,这会编译成OK。 现在我试图通过将getTable声明为“ const float **getTable() ”来使它更安全。 我得到了下面的编译错误:

Error:
  Cannot return float**const from a function that should return const float**.

为什么? 我怎样才能避免在课堂外修改表格?


声明你的方法是这样的:

float const* const* getTable() const {return table;}

要么

const float* const* getTable() const {return table;}

如果你更喜欢。


你不能将一个float**赋值给一个float const**因为它允许修改一个const对象:

float const pi = 3.141592693;
float* ptr;
float const** p = &ptr; // example of assigning a float** to a float const**, you can't do that
*p = π  // in fact assigning &pi to ptr
*ptr = 3;  // PI Indiana Bill?

C和C ++规则对于允许的内容有所不同。

  • C ++规则是,当你在一个星形之前添加一个const时,你必须在每个之后添加一个const。

  • C规则是你只能在最后一颗星星之前添加一个常量。

  • 在这两种语言中,只能在最后一颗星星之前删除一个常量。


    你可以声明你的方法为

    const float * const * const getTable() const {return table;}
    

    但即使这样(最外面的const - 函数名旁边)也不会阻止客户端尝试删除它。 你可以返回引用,但最好的方法是使用表的std :: vector并将const ref返回给它 - 除非使用C风格的数组是必须的

    链接地址: http://www.djcxy.com/p/21243.html

    上一篇: How to return const Float** from a C++ function

    下一篇: In C++ is "const" after type ID acceptable?