标准 C++ 库的跨平台程度如何?
Posted
技术标签:
【中文标题】标准 C++ 库的跨平台程度如何?【英文标题】:How cross platform is the standard C++ library? 【发布时间】:2013-06-28 13:04:48 【问题描述】:C++ 标准库(例如 std::string 流)是否可用于 ios 和 android(使用 JNI/NDK)?如果是这样:
支持到什么程度? 如何处理控制台等桌面特定功能? 它有多快/可靠? 它还有多少其他移动平台可用? 移植到移动平台(如 iOS)时,我可以指望不必使用 std 库修改太多代码吗?
【问题讨论】:
我不熟悉这些平台,但标准库应该在所有有 C++ 编译器的平台上都可用。 【参考方案1】:C++ 标准库在两者上都可用。此外,iOS 拥有 C++11 已有一段时间了。
这两个平台(基本上都是基于 POSIX)都有控制台 IO 的概念,但都没有在用户界面中提供对它的访问,而且您(至少开箱即用)也不能直接运行控制台应用程序。
因此,很明显您不能使用控制台 IO 与您的应用程序进行任何类型的用户交互 - 除非您使用平台的用户界面 API 构建它。
就可移植性而言,这两个平台上都不应该有任何问题 - 它是 Android 上的 GNU Std G++ 库和 iOS 上的 Clang C++ 库。可移植性在 iOS 上不是问题,但您可能会喜欢为 Android 构建 JNI 绑定。
但实际上,您只能使用 C++ 构建应用程序的后端。所有的用户界面都明显是不可移植的,并且通常需要用 UI 框架的语言来实现。
Windows Phone 8 允许原生应用程序,而 C++ 似乎是实现它们的首选语言。BlackBerry OS 10 从根本上说是 QNX,它也符合 POSIX。
【讨论】:
“但实际上,您只能使用 C++ 构建应用程序的后端。” - 你是对的:我正在开发一个跨平台游戏引擎,即使 C++ 可以在许多平台上编译,我仍然必须为我编写的每个平台编写一段平台代码,例如对于 iOS,我正在编写一堆 Objective-C 代码作为我的 C++ 的包装器。【参考方案2】:据我所知,标准库应该在所有平台上都是标准的。现在,它们的内部实现可能会或将会有所不同,但它们应该执行引入它们的任务。
通常标准库非常高效、快速且经过良好测试,因此应该是可靠的。
实际的问题是标准库应该包含在 C++ 实现中,但是否包含标准库完全取决于实现 C++ 的供应商。 即使它们不包含标准库,您也很有可能找到该平台的替代实现。然后,您所要做的就是将该库与您的代码链接起来。
假设有一个支持主要功能的 C++ 编译器。
即使这不可能,您也可以始终将所需的 std 函数作为自定义库移植到该特定平台。
希望这会有所帮助,
【讨论】:
以上是关于标准 C++ 库的跨平台程度如何?的主要内容,如果未能解决你的问题,请参考以下文章