C++标准库可移植性
C++ Standard Library Portability
我从事大规模、多平台、实时网络应用程序的工作。我从事的项目缺乏对容器或标准库的真正使用,没有智能指针或任何"现代"C++语言功能。许多原始动态分配的数组很常见。
我非常想开始使用标准库和一些 C++11 规范,但是,有很多人也在从事我的项目,因为"STL/C++11 不是那么便携,我们冒险使用它"。我们确实在各种嵌入式系统以及成熟的Ubuntu/Windows/Mac OS系统上运行软件。
那么,对于我的问题;标准库和 C++11 所涉及的可移植性的实际问题是什么?这只是让 g++ 超过某个版本的情况吗?是否有某些平台没有支持?是否需要编译库,如果需要,是否难以获取/编译?有没有人遇到过被非便携式纯C++烧毁的严重问题?
库对新 C++11 标准的支持对于 Visual C++ 2012、gcc>= 4.7 和 Clang>= 3.1 都非常完整,除了一些并发的东西。编译器对所有单个语言功能的支持是另一回事。有关支持的 C++11 功能的最新概述,请参阅此链接。
为了深入分析嵌入式/实时环境中的C++,Scott Meyers 的演示材料非常棒。它讨论了虚拟功能、异常处理和模板的成本等等。特别是,您可能想看看他对堆分配、运行时类型信息和异常等C++特性的分析,这些功能具有不确定的最坏情况计时保证,这对实时系统很重要。
这些问题而不是便携性应该是你主要关心的问题(如果你关心你奶奶的心脏起搏器......
任何C++编译器都应该支持标准库的某个版本。标准库是C++的一部分。不支持它意味着编译器不是C++编译器。如果您目前使用的任何编译器不支持 C++03 标准库,我会感到非常惊讶,所以没有任何借口。当然,编译器必须从 2003 年开始更新,但除非您针对某些仅受古老编译器支持的古老系统进行编译,否则您将没有问题。
至于C++11,目前支持非常好。GCC 和 MSVC 都已经支持 C++11 标准库的大部分。同样,如果您使用的是这些编译器的最新版本,并且它们支持您想要编译的系统,那么您没有理由不能使用它们支持的 C++11 标准库的子集 - 这几乎是全部。
没有标准库的C++就不C++。语言和库功能齐头并进。
有GCC的libstdc++和MSVC 2012支持的C++11库功能列表。我找不到LLVM的libc ++的类似内容,但他们确实有一个clang c ++ 11支持页面。
与您交谈的人混淆了几种不同的问题。 C++11 今天并不是真正的便携式。 我不认为任何编译器 100% 支持它(尽管我可能是错的);您可以侥幸使用其中的大部分,如果(并且仅当)您限制自己到两个或三个平台上的最新编译器(Windows和Linux,可能还有Apple)。 虽然这些是大多数可见的平台,它们只代表所有平台的一小部分机器。 (如果您正在处理大规模联网应用程序,Solaris可能很重要,而Sun CC。除非Sun自从我上次工作以来发生了很大的变化,否则意味着 C++03 中甚至有你无法计数的部分上。
STL是一个完全不同的问题。 部分取决于关于你所说的 STL 是什么意思,但肯定没有今天使用std::vector
的可移植性问题。 locale
在极少数编译器上可能会出现问题(Sun就是这样CC - 包含 Rogue Wave 和 Stlport 库),和一些算法,但在大多数情况下,你可以几乎都指望C++03。
最后,还有什么选择? 如果你没有 std::vector
,你最终实现了几乎一些东西喜欢它。 如果你真的担心 std::vector
,把它包装在你自己的类中——如果不是的话可用(极不可能,除非你回去一段时间机器),只需重新实现它,就像我们在试行标准日。
将 STLPort 与现有编译器配合使用(如果它支持)。这只不过是一个代码库,你使用其他库没有问题,对吧?
每个允许的实现定义的行为都列在公开可用的标准草案中。在 C+11 中,没有什么比 C++98 更便携的了。
- C++Union/Struct位域的实现和可移植性
- 静态库可移植性
- C++:Unicode 字符串文字的可移植性
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 在为视频游戏实施基本的二进制序列化时,请担心可移植性
- 重写类以使其更通用,以实现可移植性
- Visual Studio 2015 <=> QtCreator 5 (c++) 代码可移植性
- 通过虚拟接口类导出C 类的可移植性
- 位移位可移植性
- 如何在Visual Studio中进行串行端口编程C++Windows和Linux之间的可移植性?
- 提高 Python 可移植性问题
- 库如何在不同的操作系统之间实现可移植性
- 使用C 11 /最近的G 版本(4.7 / 4.6)的可移植性
- 模板函数实例化的可移植性问题
- XCode、命名空间、C++和代码可移植性
- 嵌入式C++项目 - 需要支持智能指针.可能的可移植性问题
- 我可以(可移植)访问C++标准库的哈希实现吗?
- 使用指针遍历数组的可移植性
- c++中的数据对齐,标准和可移植性
- C++标准库可移植性