[STM32F2] 在STM32CubeIDE项目中,“Placement new”和“std::tuple”法正常工作

[复制链接]
151|6
SocialButterfly 发表于 2025-10-27 08:42 | 显示全部楼层 |阅读模式
代码在 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 [a, b, c] = testTuples();
    void* mem = malloc(3 * sizeof(int));
    auto test = new(mem)Test;
}
令人惊讶的是,"std::pair" 可以正常工作。
尽管tuples本质上只是一种语法,但没有placement new的支持确实很麻烦。因为这样,要么必须在需要时手动重新初始化结构体,要么就得分配新的内存,要么就得使用 “memset ()” 。



jcky001 发表于 2025-10-27 14:48 | 显示全部楼层
STM32CubeIDE默认使用的GCC ARM Embedded工具链可能不支持C++17
onlycook 发表于 2025-10-27 16:48 | 显示全部楼层
看看STM32CubeIDE中是否启用了正确的C++标准支持
elephant00 发表于 2025-10-27 14:49 | 显示全部楼层
可能是由于工具链对C++特性的支持不完整或存在bug。
probedog 发表于 2025-10-27 19:50 | 显示全部楼层
在STM32CubeIDE中,检查项目属性,要启用了正确的C++标准
solty 发表于 2025-10-27 20:51 | 显示全部楼层
可以考虑使用std::pair或自定义结构作为替代方案。
kmnqhaha 发表于 2025-10-27 23:37 | 显示全部楼层
若工具链版本受限,需改用低版本兼容的语法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

63

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部