MISRA C++规则 18-4-1 说:
不应使用动态堆内存分配。
请参阅:http://dist.sonarsource.com/reports/coverage/misra_c++_2008.html
根据此规则,MISRA C++规则std::string
允许的,因为随着字符串变大std::string
确实会分配内存。另外,像std::stringstream
这样的班级呢?
不,不允许托管std::string
和std::stringstream
。如果你是在嵌入式系统上编程的,你不太可能使用这些结构。嵌入式系统很少需要完整的标准库(尤其是像std::stringstream
这样笨重和缓慢的东西(以及随之而来的一切,包括RTTI,异常,动态内存分配等。
如果您使用的是某种类型的 STL,它要么是手写的,要么是专门针对嵌入式系统的。更有可能的是,他们将使用静态内存分配器或其他策略,而不是动态分配,除非您正在编写操作系统内核。
所以,如果你问"我可以在嵌入式系统中使用std::stringstream吗",你已经来自一个糟糕的前提,不应该为安全关键设备编写软件。