我有這樣一個語句,用於輸出函數返回的內容。C++輸出的順序
std::cout<<"result: " << calculateAvg(someArray, size) << std::endl;
然而,函數在返回值之前會自己輸出東西。有沒有辦法讓我打印出該行所返回的內容,而不是在函數打印的所有內容之後?
我有這樣一個語句,用於輸出函數返回的內容。C++輸出的順序
std::cout<<"result: " << calculateAvg(someArray, size) << std::endl;
然而,函數在返回值之前會自己輸出東西。有沒有辦法讓我打印出該行所返回的內容,而不是在函數打印的所有內容之後?
有沒有辦法讓我打印出該行上返回的內容,而不是在函數打印的所有內容之後?
否。該函數必須先運行才能返回。這意味着函數輸出的任何輸出都會在函數返回值的輸出之前出現。
[不完全正確](http://stackoverflow.com/a/34886998/1413395)關於OP的意圖。 –
@πάνταῥεῖ我從閱讀這個問題中得到的結果是OP不想改變'cout'這一行。但是,如果他可以改變呼叫網站,那麼他可以重定向'cout' – NathanOliver
您可以重定向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
}
請給予更多(代碼)肉體的請求,我猶豫要將此鏈接標記爲第一位的副本。 –
@πάνταῥεῖ完成。 –
除非你重寫功能。 –
將結果賦給一個臨時變量,以確保函數的輸出在「result:」之前。 – pticawr
您還應該認識到,<< <<僅僅是調用operator <<(...)'的語法糖。所以你只需要一個嵌套的函數調用,其中的內部函數調用必須在外部調用之前進行評估。 – vsoftco