[英]c++ function call within cout statement
我正在學習 C++,最近遇到了一個令人困惑的問題,代碼如下:
#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() 的前兩次調用按預期運行,但是當我在 cout 語句中調用 b() 時,它不會立即切換數組的兩個元素,但稍后我檢查它,它已經切換了。
你能幫我理解這種行為嗎? 謝謝你。
std::cout << f() << g();
兩個函數調用的計算順序未指定; 編譯器可以先調用g()
然后f()
,也可以先調用f()
然后g()
。
在你的代碼中同樣的事情; 編譯器可以將aa[0]
的值從調用ab()
,或者它可以調用ab()
然后獲取aa[0]
的值。
表達式中的函數求值取決於編譯器流操作,例如<<
和>>
。 評估x = f1() + f2()
時發生的相同問題。 你不知道哪個將首先被評估,因為它依賴於編譯器。
在單獨的行上調用它們以排除歧義會更安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.