首页 > 解决方案 > c++ 类中的静态 const 和 const 变量在存储方面是否存在差异

问题描述

这是我拥有的代码片段:

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关键字时只包含一次?

标签: c++embedded

解决方案


我想,从技术上讲,如果编译器知道你从来没有执行sizeofmodbus,并且从来没有通过不同的指针获取这些成员的地址modbus*,并且知道它们只是用完全相同的平凡值初始化,它可能会使用“as-if " 规则将它们合并为一个并在存储方面将它们从类中删除。(如果它不能保证其中之一,就会违反语言规则。)

但这是一项艰巨的任务(特别是当您考虑多个翻译单元时),并且不会真正有用。

所以不行。我不希望这会发生。

你确实应该做那些东西static const(也许洒一点constexpr)。


推荐阅读