c++ - Arduino 是否完全支持 C++ 标准库?

标签 c++ arduino c++-standard-library

不询问 <string>但关于用于微 Controller 的标准库作为一个整体。

我还没有 Arduino 板来执行代码,正如标题所说,我很好奇 C++ 标准库是否在 Arduino 上得到完全支持并且已经是 Arduino IDE 的一部分。不用说,标准库可能是目前最高效、经过全面测试且资源最少的公开可用 C++ 代码,并且将使为像 Arduino 这样的微 Controller 编写代码变得更加容易。

或者,我是否以某种方式错过了 Arduino/微 Controller 的要点?那,因为他们的资源如此有限,大多数代码必须完全针对特定功能量身定制,而不是通用或模板化?

如果标准库不是 Arduino IDE 的一部分,那么我如何包含特定的库,例如 <algorithm><bitset>

最佳答案

Arduino 与其他嵌入式系统项目有很大不同。一方面,它使用自己的 language基于 C/C++。另一方面,您正在处理令人难以置信的专业软件,您不太可能需要 <string> 的大量抽象。或 <bitset> .与自制内核相比,您在其中处理桌面级硬件,而标准库有助于开发。此外,自制内核最终希望成为“自托管”,即它们可以将 GCC 和 libstdc++ 移植到用户空间。同样,这是您在 Arduino 环境中不会看到的。

现在当你谈论 libraries Arduino 附带的,这是一个完全不同的故事。它们是用 C 或 C++ 编写的,可以从移植的标准库中获益,但不太可能有帮助。移植 STL 并非易事,它是 very, very big .大多数功能都远远超过必要的 - 你真的需要一个 <string> 吗?或 <bitset>读取或写入字节到一个端口?然后从开发人员的角度考虑成本和复杂性:Arduino 开发人员将承担这项艰巨的(双关语不是故意的)任务来实现它,在大部分进行时支持它未使用或被删除(想想自定义分配器。)

最后一点,市面上有大量不同规范的 Arduino 开发板。标准库是建立在现有 C 库之上的抽象。有时,您将不得不埋头苦干,实际为 C 库和运行时编写代码,这使得标准库本质上不可移植(想想 libstdc++-arm-none-eabi-newlib)。

现在,如果您对此不满意,您仍然可以按照他们的 tutorial 移植 STL 的一个子集。关于为 Arduino 编写您自己的库。

关于c++ - Arduino 是否完全支持 C++ 标准库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575303/

相关文章:

c++ - std::function 接受具有不同传递类型参数的 lambda 函数(通过 ref,通过 val)

c++ - 将 char * 作为参数传递

c++ - Arduino 1.6.9 及更高版本的 c++ 支持

c++ - 获取 POSIX 纪元作为 system_clock::time_point

c++ - 如何遍历嵌套 vector ?

c++ - 构建 Qt-Static 5.3.2 时遇到问题

c++ - 仅从文件中的特定行读取数字

c++ - Arduino 将字符串拆分为带分隔符的数组

java - Android 蓝牙已配对、连接但从未将数据接收到 TextView

c++ - 删除 std::vector<std::string> 中与另一个给定 std::string 中的字符匹配的元素