نقل قول: خروجی برنامه ی C++
#include <iostream>
using namespace std;
class A {
public:
A() {
a.a = a.b = 1;
}
struct {
int a, b;
} a;
int b(void);
};
int A::b(void) {
int x = a.a;
cout << "x: -> " << x << endl;
a.a = a.b;
cout << "a.a -> " <<a.a << endl;
a.b = x;
cout << "a.b: -> " << a.b << endl;
cout << "x: -> " << x << endl;
return x;
};
int main(void) {
A a;
a.a.a = 0;
a.b();
cout << "---------------" << endl;
//because cout right to left evaluate object to print
//cout << "a.b() -> " << a.b() << "a.a.b -> " << a.a.b <<endl;
cout << "---------------" << endl;
cout << a.b()<< endl;
//because a.b() set the new value in to a.a.b print the last value
cout << a.a.b << endl;
//system("pause");
return 0;
}
البته من کد شما را اینطوری ویرایش کردم که واضحتر بشه!
ولی در هر حال به علت اینکه دستور های outstream از راست به چپ ارزیابی می شوند بنابراین در خط اول آخرین مقدار a.a.b برابر با صفر هست و بعد از نمایش این مقدار تابع ()a.b صدا زده می شود. ولی در دو خط پایین شما دوتا دستور outstream استفاده کرده اید بنابراین آخرین تغییری که تابع ()a.b بر روی a.a.b ایجاد کرده است 1 هست و به همین علت outstream دوم هم عدد 1 را نشان میدهد.