在STM32CubeIDE项目中,“Placement new”和“std::tuple”法正常工作
代码在 Visual Studio 中可以编译,但在 STM32CubeIDE 中无法编译。std::tuple<int, int, int> testTuples() { return { 1, 2, 3 }; }; struct Test { int a = 0, b = 0, c = 0; }; int main(){ auto = testTuples(); void* mem = malloc(3 * sizeof(int)); auto test = new(mem)Test;}令人惊讶的是,"std::pair" 可以正常工作。尽管tuples本质上只是一种语法,但没有placement new的支持确实很麻烦。因为这样,要么必须在需要时手动重新初始化结构体,要么就得分配新的内存,要么就得使用 “memset ()” 。STM32CubeIDE默认使用的GCC ARM Embedded工具链可能不支持C++17 看看STM32CubeIDE中是否启用了正确的C++标准支持 可能是由于工具链对C++特性的支持不完整或存在bug。 在STM32CubeIDE中,检查项目属性,要启用了正确的C++标准 可以考虑使用std::pair或自定义结构作为替代方案。 若工具链版本受限,需改用低版本兼容的语法。
页:
[1]