我正在开始一个新的 C++ 项目,我可能会从事该项目并逐渐扩展一段时间(至少一年)。我正在努力跟上 C++20,我很想开始使用一些新功能。我并不真正关心支持多个编译器(GCC 或 Clang 就足够了)。到目前为止,我只是尝试了其中的一些功能,但从未考虑在实际项目中使用 C++20 功能。
编辑:我最初的问题是关于 C++20 标准的当前状态及其编译器的支持。我被要求缩小实际问题的范围,所以我将坚持使用 C++20 的主要原因:
我感兴趣的主要功能是概念。我已经在 GCC 上尝试了带有-fconcepts标志的概念。据我了解,这应该对应于概念 TS。但是当前标准中的概念状态如何?我注意到 TS 和我在 C++20 上找到的其他一些来源之间存在一些细微的语法差异。以在实际最终标准中(至少很有可能)有效的方式使用当前 GCC 的实现(或者其他编译器,它做得更好)是否现实?是否有任何可靠的来源来跟踪当前商定的概念和其他功能的规范?
原问题:
C++20 标准的现状如何?我什么时候可以期望它是完整的,或者至少处于可以安全使用它而不必担心我的代码在最终标准中无效的状态?我使用cppreference作为我的语言细节信息的主要来源。当它说 时since C++20,这是否意味着它是将保留在标准中的最终版本?
C++20 支持的状态如何?我什么时候可以期望它在 GCC、Clang 或 MSVC 中完全实现(或至少是最重要的部分)?特别是,概念和模块的状态如何?我知道 GCC 对概念有实验性支持-fconcepts(尽管cppreference说,它支持“仅 TS”),并且 GCC 的一个分支支持具有-fmodules(但不适用于概念)的模块。
C++20 标准,即使出现灾难性的情况,也将于 2020 年完成。这不是火箭科学;)
C++20 草案在上次标准会议上被指定为功能完整,因此通常不会添加新内容。特征被删除或发生重大改变的可能性也很低,但非零。
至于对各种 C++20 功能的支持,这需要时间。不仅如此,这种支持的成熟还需要进一步的时间。如果您只是想尝试一下 C++20 功能,那么您很有可能在 2020 年的某个时候在某些编译器中针对许多 C++20 功能实现这一点。但如果您想真正生产一个稳定的产品,那么您可能需要这样做。最好等到 2021 年或 2022 年编译器/库成熟。
Visual Studio 往往比其他编译器需要更长的时间来实现功能。但一般来说,他们需要更少的时间来实现库功能,并且通常会在发布任何依赖的语言功能后立即执行此操作。相比之下,libc++ 和 libstdc++ 在完成库功能方面往往比各自的编译器在完成语言功能方面慢得多。
同样对于C++20,微软一直在大力推动协程和模块,他们拥有目前最成熟的实现。因此,如果这就是您所寻找的,VS 可能会比其他人为您提供更多服务。