Neil Chou
Neil Chou

Reputation: 3

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

Upvotes: 0

Views: 260

Answers (1)

Michael Surette
Michael Surette

Reputation: 711

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;
}

Upvotes: 2

Related Questions