如何从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