C++ 标准库(例如 std::string 流)在 iOS 和 Android 上是否可用(使用 JNI/NDK)?如果是这样:
支持到什么程度?如何处理控制台等桌面特定功能?它有多快/可靠?它在多少个其他移动平台上可用?移植到移动平台(如 iOS)时,我可以指望不必使用 std 库修改太多代码吗?
C++ 标准库(例如 std::string 流)在 iOS 和 Android 上是否可用(使用 JNI/NDK)?如果是这样:
支持到什么程度?如何处理控制台等桌面特定功能?它有多快/可靠?它在多少个其他移动平台上可用?移植到移动平台(如 iOS)时,我可以指望不必使用 std 库修改太多代码吗?
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。
据我所知,标准库应该是所有平台的标准库。现在他们的内部实现可能会或将会改变,但他们应该执行他们被引入的任务。
通常,std lib 非常高效、快速且经过良好测试,因此它应该是可靠的。
实际的问题是 std lib 应该包含在 C++ 实现中,但是否包含 std lib 完全取决于实现 C++ 的供应商。即使它们不包含标准库,您也很有可能找到该平台的替代实现。然后您所要做的就是将该库与您的代码链接起来。
假设有一个支持主要功能的 C++ 编译器。
即使这是不可能的,您也可以始终将所需的 std 函数作为自定义库移植到该特定平台。
希望这可以帮助,