项目中只有 C++17 兼容性是否安全?



我正在从头开始一个C++项目。单独支持C++17安全吗?换句话说,是否建议以C++17方式实现的任何功能具有与C++11C++14兼容的相应功能?

这有基于意见的概念,但我认为对此有一个客观的看法。

作为一般规则,我会说,通过奥卡姆剃刀,无论出于何种原因,拥有相同功能的不同版本都是不好的。除非必要,否则不要介绍它。它比副本更糟糕。

设置为标准并面向未来 - 准备好在目标构建基础结构支持新功能后采用新功能,以便最终可以弃用并删除过时的版本。有一个很好的概念,3-6年内可用,所以你可以围绕它设计你的界面。

提供向后标准兼容性有时是可能的,但并非总是如此,并且可能很麻烦。假设您从某个版本开始并降级是一个非常冒险的想法。

你不能真的说你使用 c++17 并提供向后兼容性,因为不可能完全做到并保持相同的接口。

什么样的软件?

例如,在 Linux 发行版中的库或应用程序中,您必须与消费者打交道,并且可能其中一些仍将在较旧的操作系统和编译器上,并且不想更新。对于库,如果您想在 API 中提供一些新功能,同时支持旧功能,您可能需要宏/编译选项背后的一些功能(例如std::string_view支持的地方,const std::string &否则(。对于应用程序 id,请坚持使用所需的最低版本。

但是,对于您分发的应用程序,可以使用所需的任何版本并捆绑依赖项。因此,您可以使用比系统附带的更新版本的编译器,重建 boost C++等,只需确保静态链接或捆绑所需的任何 DLL/所以。

最新更新