В течение последних 24 часов я просматривал книгу «Сэм научи себя С ++ за 24 часа», и следующий код вводит меня в заблуждение.Перегруженный оператор ++ возвращает ссылку на объект Const Counter.Таким образом, я ожидаю, что объект Counter с именем «a» будет иметь тот же адрес, что и объект Counter с именем «c», который был возвращен «a» с помощью оператора ++ (после увеличения члена).Но после запуска этого простого кода вы можете видеть, что адреса «а» и «с» разные.Почему это так, поскольку «а» является ссылкой на «с» и, следовательно, должен иметь один и тот же адрес?
#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;
}