【问题标题】:Why does multiple calls to xalloc result in delayed output?为什么多次调用 xalloc 会导致输出延迟?
【发布时间】:2013-06-28 15:56:03
【问题描述】:

当我在单个表达式中打印流的 id 时,它会向后打印它。通常是这样的:

std::stringstream ss;

std::cout << ss.xalloc() << '\n';
std::cout << ss.xalloc() << '\n';
std::cout << ss.xalloc();

输出是:

4
5
6

但是当我在一个表达式中执行它时,它会向后打印,为什么?

std::stringstream ss;

std::cout << ss.xalloc() << '\n'
          << ss.xalloc() << '\n'
          << ss.xalloc();

输出:

6
5
4

我知道评估的顺序是未指定的,但是为什么以下总是导致正确的顺序:

std::cout << 4 << 5 << 6;

有人可以解释为什么xalloc 的行为不同吗?谢谢。

【问题讨论】:

  • 您无法观察到评估 456 的顺序 - 只能看到它们传递给 cout 的顺序。您可以观察三个ss.xalloc() 表达式的求值顺序。

标签: c++ stream iostream


【解决方案1】:

这与xalloc 无关;任何其他每次调用时返回不同值的函数都会做同样的事情。参数的求值顺序未指定;编译器可以按任何顺序进行这三个函数调用。评估完所有参数后,插入的顺序是从左到右。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2019-11-18
    相关资源
    最近更新 更多