这是我的代码片段:
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/