Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
74 views
in Technique[技术] by (71.8m points)

c++ reference to a class member but not changing value

Please help me to review the following code.

I am wondering why the variable "b" is not the modified value.

I can not change the value using reference ?

Thanks!

#include <iostream>

using namespace std;

class Foo{
    public:
        int a = 1;
        int& check(){
            return a;
        };
};

int main()
{
    int b;
    Foo foo;
    
    b = foo.check();
    cout << b << endl;
    
    foo.check() = 2;
    cout << foo.a << endl;
    cout << b << endl;

    return 0;
}

The output is

1
2
1
question from:https://stackoverflow.com/questions/65864119/c-reference-to-a-class-member-but-not-changing-value

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

As @Igor Tandetnik indicated, foo.check returns a reference, but b is an int, not a reference to int, so it keeps the original value.

What you want can be achieved by ...

#include <iostream>

using namespace std;

class Foo
{
public:
    int a = 1;
    int &check()
    {
        return a;
    };
};

int main()
{
    Foo foo;
    int &b { foo.check() };

    cout << b << endl;

    foo.check() = 2;
    cout << foo.a << endl;
    cout << b << endl;

    return 0;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...