【发布时间】:2014-02-04 17:50:20
【问题描述】:
为什么下面的代码给我一个错误
Test.cpp:23:10: 错误:从‘const int*’到‘int*’的无效转换[-fpermissive]返回数组;
#include <iostream>
#include <stdio.h>
#define MAX_ELEMENTS 5
class CBase
{
public:
CBase()
{
for(int i = 0; i < MAX_ELEMENTS; i++)
{
array[i] = 0;
}
}
~CBase()
{
// Nothing
}
int * GetArray() const
{
return array;
}
private:
int array[MAX_ELEMENTS];
};
int main ()
{
CBase b;
return 1;
}
编辑:我知道我应该返回一个 const int * 但后来我尝试了下面的东西,它工作正常,请求解释允许这个而不允许上面的原因。
#include <iostream>
#include <stdio.h>
class CBase
{
public:
CBase():ptr(NULL)
{
}
~CBase()
{
delete ptr;
}
int * ptr;
public:
int * GetPtr() const
{
return ptr;
}
};
int main ()
{
CBase b;
return 1;
}
【问题讨论】:
-
当您让调用者修改 const 对象的数据时,确实会破坏 const 正确性。
-
试试
const int * GetArray() const {...} -
因为你的 const 方法应该返回
int const*而不是int* -
但是 const 成员函数如何按原样返回普通变量(即非数组)而没有任何错误?
-
@user3271978,它的工作方式完全相同。您不必返回
const int * const,就像您不必返回const double或其他东西一样。返回值被复制出来。