c++11 - 是否有特定时间使用 c++11 而不是 c++17

标签 c++11

假设我想创建一个现代 C++ 应用程序。我有零遗留代码,需要与 c++98/03 向后兼容。有理由选择 c++11 或 c++14 而不是 c++17 吗?

通过研究,c++11 和 c++17 之间似乎没有任何重大变化。看起来c++17就是c++11,功能越来越多。我意识到支持 c++11 功能的编译器比所有新的 c++17 更改还要多。

因此编译器支持是一个考虑因素,因为它会影响可移植性。另外,c++17 尚未正式发布,但在某个时候它会发布。

为了在 C++11 和 C++17 之间进行选择,我应该评估哪些标准?我正在寻找非基于意见的原因。

谢谢!

最佳答案

我觉得这会因为含糊不清、基于意见而结束,但到底是什么。请记住,14 也在 11 到 17 之间,并且支持范围更广。我能想到,现在基本上没有理由在新代码库中使用 11 而不是 14。对于17,问题就像你说的,编译器支持。如果您需要以 Windows 为目标,MSVC 仍然缺少大量 17 支持:http://en.cppreference.com/w/cpp/compiler_support#C.2B.2B17_features .

为了立即编写跨平台的 17 种代码,您几乎肯定需要一些重型持续集成,以便每次推送时在至少 2 个(如果不是 3 个)编译器上构建和运行您的代码。

如果您不以 Windows 为目标,或者即使您只能致力于单个编译器,我认为没有任何理由不使用 17。(我的意思是:如果您仅以 MSVC 为目标,则支持 17已经完成了,但是使用可用的东西没有什么缺点,如果不支持某些东西,它就不会构建。当你支持支持不同东西的不同编译器,并且你没有在本地构建它们时,它就变成了一场噩梦) .

关于c++11 - 是否有特定时间使用 c++11 而不是 c++17,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45805157/

相关文章:

c++ - 需要引用标准关于 main 函数作为模板函数的合法性

angular - 从函数返回 vector 作为自动

c++ - 函数正确执行后如何修复 Core Dumped 错误?

c++ - 如果传入 std::swap 的对象在交换期间抛出异常怎么办?

c++11 - 为什么我不能专门化 std::tuple_element?

c++ - 将int的所有字节都设置为(unsigned char)0,保证代表零?

c++ - C++是否使用接口(interface)?

c++ - std::bind 和 std::function 重叠还是互补?

c++ - 数组与 0 个元素对齐

c++ - 是否有 C++ 标准库包装器或 pthread_sigmask 的替代品?