所有的C++编译器都支持async/await关键字吗?

13

我想在C++ (UE4 框架) 中使用 async/await 语法,但由于跨平台代码,我不确定是否可能... 可能吗?如果可以,我该如何使用它?

还有在 Visual Studio 中突出显示的 await__await(还有 resumableyield__yield_value)关键字。有什么区别?也许并非所有编译器都支持这些关键字或单独支持这些关键字?

gccclang 是否接受它?还是不接受,我只能为每个平台使用宏?


不是所有的编译器都支持asyncawait语法。GCC和CLang只是众多编译器中的两个。您应该检查Greenhills、IAR、Keil和Visual Studio等几个编译器。 - Thomas Matthews
1
LLVM 和 Clang 的实现正在进行中:请参见 https://twitter.com/Eric01/status/867473461836263424(2017 年 5 月 24 日: "协程现在已经在 Clang Trunk 中!") - Pascal T.
1个回答

29

asyncawait 是由 Microsoft 提出的语言扩展,经过数次修改,当前版本为N4134,但尚未被纳入标准规范。

由于并未完全成熟并且没有在 TS 中进行充分探讨,该提案遭到了很多人的反对,例如http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0158r0.html,而且还有竞争性的提案,例如N3985,它提出了可以在现有语言标准内实现的协程。

据我所知,目前唯一支持 async/await 的编译器是 MS Visual Studio。

更新:clang 5.0 已经支持了当前草案的协程提案https://isocpp.org/files/papers/N4663.pdf,该提案已经被接受为 TS,并正在朝着 C++20 标准前进。


哇,你确实是这个主题的专家。 - Abhijeet Nagre
3
你可以通过了解寻找提案的位置,订阅wg21邮件列表和跟踪gcc/clang变更日志来成为专业主题方面的专家。 - nurettin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接