You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

依据C++17标准,两次未存储std::future的std::async调用程序输出为何?是否必输出z?

程序输出分析(基于C++17标准)

首先明确代码里的关键规则:当调用std::async并指定std::launch::async策略时,若不保存返回的std::future对象,这个临时的std::future在语句结束时析构,会强制阻塞当前线程,直到对应的异步任务完全执行完毕。

具体执行流程:

  • 初始化字符串x为"x"。
  • 第一个std::async语句:启动异步线程执行x = "y",语句结束时临时std::future析构,主线程阻塞等待该任务完成,此时x的值变为"y"。
  • 第二个std::async语句:启动异步线程执行x = "z",语句结束时临时std::future析构,主线程再次阻塞等待该任务完成,此时x的值变为"z"。
  • 最后执行std::cout << x,输出z。

结论:该程序保证输出z。

内容的提问来源于stack exchange,提问作者Yasuo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:12:08