c++ - c++ 类中的 static const 和 const 变量在存储方面有区别吗

标签 c++ embedded

这是我的代码片段:

class modbus {
public:
  static const uint8_t modbusHeader = 2;
  static const uint8_t modbusCRC = 2;
  static const uint8_t modbusPDU = modbusHeader + modbusCRC;
  static const uint8_t exceptionBase = 0x80;
  static const uint32_t transmitTimeout = 5000;
};

它为我需要在类中创建的 modbus 数据包定义了一些大小。我在嵌入式环境中工作,因此总是存在尺寸优化和考虑因素。因此,我真的希望在闪存的只读部分中只出现一次这些常量值。

我已选择将这些变量设置为 static 但这是必要的吗?编译器会推断这些值只需要在二进制文件中保存一次,因此当我删除 static 关键字时只包含它们一次吗?

最佳答案

我想,从技术上讲,如果编译器知道您从未在 modbus 上执行过 sizeof,也从未获取这些成员的地址不同的 modbus* 指针,并且知道它们只是用完全相同的微不足道的值初始化的,它可能会使用“as-if”规则将它们合并为一个并从类中删除它们的存储。 (如果它不能保证这些事情中的一个,就会违反语言规则。)

但这是一项艰巨的任务(尤其是当您考虑多个翻译单元时),而且实际上没有用。

所以没有。我不希望这会发生。

您确实应该将这些东西设为 static const(也许还需要一些 constexpr)。

关于c++ - c++ 类中的 static const 和 const 变量在存储方面有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57954952/

相关文章:

linux - 在后台运行进程会降低其权限吗?

c++ - opencv拼接免费dll

c++ - 将模板参数包存储为非类模板的属性

c++ - statvfs 问题 - printf/调试器

c++ - 使用级联相关神经网络(再训练)

c++ - 简化嵌入式系统中的位(引脚)操作

c - 使用 STM32 HAL 定时器并调整 PWM 信号的占空比

c++ - 在窗口中获取缩放百分比

embedded - 如何用一个XBee快速向其他XBee广播信息?

c++ - 不正常的退出会破坏 C++ 内存分配器吗?