这是我的代码:
class X
{
public:
X():_x(5){}
void GetVal(int & oVal)
{
oVal = _x;
}
private:
int _x;
};
class Y
{
public:
X * const GetX()
{
return &_x;
}
private:
X _x;
};
int main()
{
Y y;
X * p = y.GetX();
int * pInt = new int[2];
p->GetVal(pInt[0]);
}
在main的最后一行,我收到错误
来自const限定函数
的成员访问不正确
仅当代码在sun solaris系统上编译时才会出现此错误,并且不会在Windows或aix系统上发生。知道为什么吗?
最奇怪的是,如果用一个简单的整数替换pInt [0],错误就消失了(int a = 0; p-> GetVal(a))
答案 0 :(得分:1)
const
中的X * const GetX()
将被忽略,因为函数调用的结果是rvalue,根据c++ const member function that returns a const pointer.. But what type of const is the returned pointer?,非类型的rvalues不能是const
。
你确定你不想写:
const X * GetX() const
{
return &_x;
}
也就是说,你将它从将变量指针返回到变量指针变为常量数据,并将GetX()
声明为常量成员函数,即可以在Y的常量实例:const Y y;
此外,在class X
中,您可以将GetVal()
更改为
void GetVal(int & oVal) const
{
oVal = _x;
}