【问题标题】:C++ Order of OutputC++ 输出顺序
【发布时间】:2016-01-19 21:05:28
【问题描述】:

我有一个这样的语句,旨在输出函数返回的内容。

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

然而,该函数在返回值之前会自行输出内容。有没有办法让我打印出该行返回的内容,而不是在函数打印的所有内容之后?

【问题讨论】:

  • 除非你重写函数。
  • 将结果赋值给一个临时变量,以确保函数的任何输出都在“result:”之前
  • 您还应该意识到&lt;&lt; 只是调用operator&lt;&lt;(...) 的语法糖。所以你只有一个嵌套的函数调用,其中的内部函数必须在外部函数之前进行评估。

标签: c++ cout


【解决方案1】:

有没有办法让我打印出该行返回的内容,而不是在函数打印的所有内容之后?

没有。该函数必须运行才能返回某些内容。这意味着函数输出的任何输出都将在函数返回值的输出之前。

【讨论】:

  • Not entirely true 关于 OP 的意图。
  • @πάνταῥεῖ 我从阅读问题中得出的结论是 OP 不想更改 cout 行。但是是的,如果他可以更改呼叫站点,那么他可以重定向cout
【解决方案2】:

你可以将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
}

【讨论】:

  • 请给这个答案多一点(代码)肉,我犹豫着将此链接标记为第一名的重复。
猜你喜欢
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多