我正在处理代码的const正确性,并想知道为什么这段代码可以编译:
class X
{
int x;
int& y;
public:
X(int& _y):y(_y)
{
}
void f(int& newY) const
{
//x = 3; would not work, that's fine
y = newY; //does compile. Why?
}
};
int main(int argc, char **argv)
{
int i1=0, i2=0;
X myX(i1);
myX.f(i2);
...
}
据我所知,函数f()修改了对象myX,尽管它标记为const。我怎样才能确保当我对y进行赋值时编译器发出警告?(Visual C++ 2008)
非常感谢!
*y = newY
依旧可以是const的,因为指针本身并没有被改变,只有指向的对象发生了变化。同样地,引用本身是无法改变的,只有其所指向的对象可以改变。 - GManNickG