2016-01-19 91 views
0

我有這樣一個語句,用於輸出函數返回的內容。C++輸出的順序

std::cout<<"result: " << calculateAvg(someArray, size) << std::endl; 

然而,函數在返回值之前會自己輸出東西。有沒有辦法讓我打印出該行所返回的內容,而不是在函數打印的所有內容之後?

+2

除非你重寫功能。 –

+1

將結果賦給一個臨時變量,以確保函數的輸出在「result:」之前。 – pticawr

+0

您還應該認識到,<< <<僅僅是調用operator <<(...)'的語法糖。所以你只需要一個嵌套的函數調用,其中的內部函數調用必須在外部調用之前進行評估。 – vsoftco

回答

3

有沒有辦法讓我打印出該行上返回的內容,而不是在函數打印的所有內容之後?

否。該函數必須先運行才能返回。這意味着函數輸出的任何輸出都會在函數返回值的輸出之前出現。

+0

[不完全正確](http://stackoverflow.com/a/34886998/1413395)關於OP的意圖。 –

+0

@πάνταῥεῖ我從閱讀這個問題中得到的結果是OP不想改變'cout'這一行。但是,如果他可以改變呼叫網站,那麼他可以重定向'cout' – NathanOliver

3

您可以重定向std::cout一個緩衝區(見this post),調用函數,重定向回,打印結果,然後打印緩衝區:

#include <iostream> 
#include <sstream> 
#include <string> 

std::string myFunc() { 
    std::cout << "print inside myFunc" << std::endl; 
    return "string returned from myFunc"; 
} 

int main() { 
    std::stringstream print_inside; 
    std::streambuf * old = std::cout.rdbuf(print_inside.rdbuf()); 
    std::string returned_string = myFunc(); 
    std::cout.rdbuf(old); 

    std::cout << returned_string << std::endl; 
    std::cout << print_inside.str() << std::flush; //endl already there 
} 
+0

請給予更多(代碼)肉體的請求,我猶豫要將此鏈接標記爲第一位的副本。 –

+0

@πάνταῥεῖ完成。 –