这是我的代码片段:
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;
};
Run Code Online (Sandbox Code Playgroud)
它为我需要在类中创建的modbus数据包定义了一些大小。我在嵌入式环境中工作,因此大小优化和注意事项始终存在。因此,我确实希望在闪存的只读部分中仅出现一次这些常数值。
我选择将这些变量设置为,static但这是否必要?编译器是否会推断这些值仅需要在二进制文件中保存一次,因此在删除static关键字时仅将它们包括一次?
从技术上讲,我想如果编译器知道您从未在sizeof上执行过modbus,并且从未通过不同的modbus*指针获取这些成员的地址,并且知道它们仅使用完全相同的琐碎值进行了初始化,则可以使用“ as-if ”规则,将它们合并为一个,并从存储方面将其从类中删除。(如果不能仅保证其中之一,则会违反该语言的规则。)
但这是一个很高的要求(尤其是当您考虑多个翻译单元时),并且实际上没有用。
所以不行。我不希望这会发生。
您确实应该制作这些东西static const(也许撒上constexpr)。