簡體   English   中英

cout語句中的c ++函數調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM