我正在學習C++,最近碰到一個令人困惑的問題中的函數調用,下面的代碼:C++的cout語句
#include <iostream>
using namespace std;
class A {
public:
A() { a[0] = 1; a[1] = 0; }
int a[2];
int b(void) { int x=a[0];a[0]=a[1];a[1]=x; return x; }
};
int main(void) {
A a;
cout<<a.a[0]<<a.a[1]<<endl; //outputs 10
a.b();
cout<<a.a[0]<<a.a[1]<<endl; //outputs 01
a.b();
cout<<a.a[0]<<a.a[1]<<endl; //outputs 10
cout << a.b() << //outputs 1
endl<< a.a[0]<<a.a[1] << endl; //outputs 10???
cout<<a.a[0]<<a.a[1]<<endl; //outputs 01???
return 0;
}
前兩個B的()的調用行爲與預期相同,但是當我打電話b()在cout語句中,它不會馬上切換數組的兩個元素,但後來我檢查它,它已經被切換了。
你能幫助我理解這種行爲?謝謝。
請允許我建議你那是這個問題(和許多類似的)的副本:http://stackoverflow.com/questions/10782863/what-is-the-correct-answer-for-cout-cc – jogojapan
@jogojapan - 它不是這個問題的重複,因爲有一個函數調用引入了一個序列點。 –
@PeteBecker正如你在你的回答中所說的那樣,這兩個評價是無序的(相對於彼此)。由於其中一個對另一個讀取的左值具有副作用,所以與重複問題中描述的基本情況相同。 – jogojapan