High integrity C++ rule 7.2.1 , “使用显式枚举基数并确保它足够大以存储所有枚举数”要求枚举和作用域枚举定义基数(大小)
例如 //合规
enum E1 : int8_t {a,b,c};
enum class E2 : int32_t {a,b,c};
//不合规
enum E3 {a,b,c};
enum class E4 {a,b,c};
排除编译器无法确定大小的前向声明,我们无法理解此要求背后的合理性。我们认为,强制开发人员指定大小更有可能妨碍潜在的编译器优化。坚持让程序员在编译器可以确定的时候做出决定有什么好处?
这条规则背后的基本原理是什么?
最佳答案
“好吧,这取决于...™”
如果在您的特定情况下,您没有特别的理由关心您的编译器可能选择使用多少位来描述您的enum
,那么...好吧...“你没有理由关心!”
但是如果您可能需要确定某些底层数据表示(二进制记录,例如……内存中的结构……)使用“特定的已知位数”,那么 你关心。
虽然我总体上同意这些“高完整性™” 指南中的许多原则,但我对这个特定部分不太确定。 如果没有其他相反的决定性考虑,我不太倾向于告诉编译器它必须做什么。 “如果我没有理由去关心,那我就不在乎了。”
关于c++ - 高完整性 C++ 规则 7.2.1 的基本原理是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58944102/