以前被称为“合作伙伴” C++可恢复函数 “-是 技术规格 (TS)我们在Visual C++编译器中实现的。自从VC++2013年11月CTP发布以来,我们已经支持协同程序三年了。

null

如果你在使用协同程序,你应该意识到 关键字“yield”在VS 2017版本中被删除 . 如果在代码中使用“yield”,则必须更改代码以使用新关键字“cou yield”。如果您有使用“yield expr”的生成器,则需要将其更改为“cou yield expr”。

只要您在更改代码,您可能希望从使用’await’迁移到’cou await’,并从协程中的’return’迁移到’cou return’。Visual C++编译器今天接受所有三个新关键字。

有关协同程序的更多信息,请参见此处的协同程序TS: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4628.pdf . 由于CONTUTIN TS的作者在Visual C++团队工作,你也可以发送邮件给我们你的问题或反馈(见下文)。

我们为什么要改变?

作为一个技术规范,CORDOTIN尚未被应用到C++标准中。当VisualC++团队在2013实现它们时,该特性被实现为一个即将到来的C++特性的预览。C++标准委员会于2015十月投票,修改了关键词,包括前缀“CO”。委员会不想使用与已经使用的变量名冲突的关键字`例如,收益率在农业和金融领域有着广泛的应用。此外,在库中还使用了名为“yield”的函数 范围TS 而在 线程支持库 .

以下是需要应用于代码的关键字映射,以供参考。

而不是“等待”` 使用`cou await`
而不是“return”` 使用`coU return`
而不是“yield”` 使用`coU yield`

我们在VS2017中删除了“yield”关键字,因为我们还实现了Range-v3 TS,我们希望许多开发人员在使用范围声明后调用“yield”,例如,“using namespace::ranges”。

防止将来出现这些中断

我们知道你们中的许多人在代码中依赖于协同程序,并且理解这种突破性的更改是困难的。我们不能阻止委员会做出改变(相信我们,我们会努力!)但至少我们可以尽最大努力确保当事情发生变化时你不会感到惊讶。

我们在实现 模块TS 在VS 2015更新1中。您需要包括`/experimental:module`在您的命令行上,这样就可以清楚地看到该功能是实验性的,并且可以更改。如果我们能回到过去,我们就可以用`/exp启用协同程序erimental:await`而不仅仅是`/await`(或’experiemental:coroutine`如果我们知道三年后这个功能会被称为什么的话!)

在将来的版本中 我们将弃用’await’关键字,并限制从协程中使用’return’ 支持新关键字“cou await”和“cou return”。

最后

一如既往,我们欢迎您的反馈。请在下面的评论中或通过电子邮件给我们关于合作的反馈 visualcpp@microsoft.com .

如果您在VS 2017中遇到VisualC++的其他问题,请通过报告从安装程序或VisualStudioIDE本身通知我们一个问题选项。如需建议,请告知我们 用户语音 . 谢谢您!

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0 分享