首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更正cout执行

更正cout执行
EN

Stack Overflow用户
提问于 2020-04-25 02:10:22
回答 2查看 57关注 0票数 0

在使用cout时,如果语句为cout<<E1<<E2<<E3;,则不能保证E1E2E3的执行顺序与它们编写的顺序相同。

我可以做什么来确保它们以相同的顺序执行,而不是在它们之间编写另一个cout语句或endl

EN

回答 2

Stack Overflow用户

发布于 2020-04-25 03:35:43

我不确定这是不是最好的决定(或者至少是一个好决定),但你可以使用Boost.Preprocessor:

代码语言:javascript
复制
#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>

#define COUT_IMPL(_, __, i) \
  std::cout << (i);
#define COUT(...) \
  BOOST_PP_SEQ_FOR_EACH( \
    COUT_IMPL, \
    _, \
    BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \
  );

void use() {
  COUT(e1, e2, e3);
} 

这使得C预处理器可以为您创建;-terminated cout,从而提供有保证的计算顺序。

票数 0
EN

Stack Overflow用户

发布于 2020-04-25 03:56:05

除非重新定义<<运算符,否则将按编写的顺序执行。这个

代码语言:javascript
复制
cout << E1 

首先使用std::ostream返回类型执行(当然,除非我们使用不同的cout类型玩游戏。cout不是C++关键字或保留字)。这个副作用的cout被传递给下一个表达式:

代码语言:javascript
复制
cout << E2

对下一个参数重复该过程。我没有注意到运算符优先级的任何C++更改。我想不出任何方法来使用C预处理器,或者使用其他真正晦涩难懂的重载技术,在这些技术中,您可能能够执行一些非典型操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61414773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档