首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中修改常量成员函数中的引用成员

在C++中修改常量成员函数中的引用成员
EN

Stack Overflow用户
提问于 2010-03-12 17:25:17
回答 2查看 3.9K关注 0票数 30

我正在研究我的代码的常量正确性,只是想知道为什么这段代码会编译:

代码语言:javascript
复制
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)

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-12 17:29:34

因为您没有更改X中的任何变量。实际上,您正在更改_y,它相对于您的类来说是一个局外人。不要忘记这一点:

代码语言:javascript
复制
y = newY;

是将newY的值赋给y所指向的变量,而不是它们自己的引用。只有在初始化时才会考虑引用。

票数 28
EN

Stack Overflow用户

发布于 2010-03-12 17:51:07

这种情况类似于指针成员。在常量成员函数中,常量应用于指针本身,而不是被指针对象。

这是两者之间的区别:

代码语言:javascript
复制
X* const //this is how the const applies: you can modify the pointee
const X*

除了X& const不是有效的语法,因为引用一开始就不能引用另一个对象(它们总是隐式的常量)。结论: const on方法对成员引用没有影响。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2431596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档