此代码已编译。
struct A
{
const int *getX() const
{
return &x;
}
int *getX()
{
const A *thisConst = this;
return const_cast<int *>(thisConst->getX());
}
void f()
{
int *p = getX();
}
int x;
};
但是这段代码没有。
struct I
{
virtual const int *getX() const = 0;
int *getX()
{
const I *thisConst = this;
return const_cast<int *>(thisConst->getX());
}
};
struct A : I
{
virtual const int *getX() const
{
return &x;
}
void f()
{
int *p = getX();
}
int x;
};
'const_cast':无法从'const int *'转换为'int *'
我知道如果我给出不同的名字,它将被编译。但有没有功能重命名的方法?
答案 0 :(得分:1)
'const_cast':无法从'const A *'转换为'int *'
在尝试编译程序时我没有收到此错误,而是
error: invalid conversion from 'const int*' to 'int*' [-fpermissive]
为了成功编译我更正了以下行
int *p = getX();
到
const int *p = getX();
const int *
和int*
是两种不同的类型,如果不进行强制转换或修改变量类型p
,则无法直接指定它。