У меня есть следующий код: —
#include <iostream>
using namespace std;
class A {
int *val;
public:
A() { val = new int; *val = 0; }
int get() { return ++(*val); }
};
int main() {
A a,b = a;
A c,d = c;
cout << a.get() << b.get() ;
cout << endl ;
cout << c.get() << endl ;//
cout << d.get() << endl;
return 0;
}
Это производит вывод как:
21
1
2
Поведение в случае c.get и d.get легко понять.
И c, и d используют один и тот же указатель val, а a и b — один и тот же указатель val.
Поэтому c.get () должен возвращать 1, а d.get () должен возвращать 2.
Но я ожидал аналогичного поведения в a.get () и b.get (). (возможно я не правильно понял cout)
Я не могу понять, как a.get () производит 2.
Можете ли вы объяснить, почему я получаю такой вывод. По моему мнению, результат должен был быть:
12
1
2
cout << a.get() << b.get() ;
исполняется как:
cout.operator<<(a.get()).operator<<(b.get());
В этом выражении, будь a.get()
вызывается первым или b.get()
первый вызов не указан языком. Это зависит от платформы.
Вы можете разделить их на два оператора, чтобы убедиться, что они выполняются в ожидаемом порядке.
cout << a.get();
cout << b.get();
Других решений пока нет …