1

我有一个带有二维整数数组的类,该数组实现为 int **。我为这个二维数组实现了一个访问器函数,如下所示,返回一个 const int** 以防止用户对其进行编辑:

const int** Class::Access() const
{
     return pp_array;
}

但是我得到了编译错误“从 int** 到 const int** 的无效转换”。为什么这里不允许对 const 的提升?如何在没有编辑权限的情况下授予用户访问信息的权限?

4

2 回答 2

6

Greyson 是正确的,你会想要使用const int* const*,但没有解释为什么你的原始版本失败了。

以下是为什么 int**不兼容的演示const int**

const int ci = 0;
const int* pci = &ci;
int* pi;
int** ppi = π
const int** ppci = ppi; // this line is the lynchpin
*ppci = pci;
*pi = 1; // modifies ci!
于 2012-05-04T03:59:37.077 回答
4

我误认为const方法的正确性是错误的原因。正如 Ben 指出的那样,const该方法的 -ness 是无关紧要的,因为它仅适用于外部指针 [指向ints 的指针] 的值,可以轻松地将其复制到可变版本。

为了保护数据(这是您的首选结果),您应该使ints 和指向ints 的指针都保持不变:

int const * const * Class::Access() const
{
   return pp_array;
}

将工作。

如果您更喜欢将 const 放在前面,您也可以像这样编写声明:

const int * const * Class::Access() const;

但由于第二个const适用于指针,它必须放在const星号的右边(就像适用于方法的那个)。

于 2012-05-04T03:49:41.297 回答