C ++类返回具有新地址的引用

时间:2018-10-09 19:19:34

标签: c++ class reference

在过去的24小时中,我一直在阅读“ Sam's Teach Yourself C ++ in 24 Hours”一书,以下代码使我感到困惑。重载的运算符++返回对const Counter对象的引用。因此,我希望计数器对象“ a”将与计数器对象“ c”具有相同的地址,后者使用++运算符返回给“ a”(在增加成员之后)。但是运行此简单代码后,您可以看到“ a”和“ c”的地址不同。为什么这样,因为“ a”是对“ c”的引用,因此应该具有相同的地址?

#include <iostream>

class Counter
{
public:
    Counter();
    ~Counter(){}
    int getValue() const { return value; }
    void setValue(int x) { value = x; }
    void increment() { ++value; }
    const Counter& operator++();

private:
    int value;
};

Counter::Counter():
value(0)
{}

const Counter& Counter::operator++()
{
    ++value;
    return *this;
}

int main()
{
    Counter c;
    std::cout << "The value of c is " << c.getValue() 
        << "\n";
    c.increment();
    std::cout << "The value of c is " << c.getValue() 
        << "\n";
    ++c;
    std::cout << "The value of c is " << c.getValue() 
        << "\n";
    Counter a = ++c;
    std::cout << "The value of a: " << a.getValue();
    std::cout << " and c: " << c.getValue() << "\n";

    std::cout << "address of a: " << &a << "\n" << "address of 
c: " << &c << "\n";

    return 0;
}

1 个答案:

答案 0 :(得分:4)

  

因此,我希望Counter对象“ a”将与Counter对象“ c”具有相同的地址,后者通过++运算符返回给“ a”。

如果您通过引用捕获返回值,例如

Counter const& a = ++c;

使用时

Counter a = ++c;

根据返回值++c构造一个新对象。因此,ca最终有两个不同的地址。