c++ - 高完整性 C++ 规则 7.2.1 的基本原理是什么

标签 c++

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/

相关文章:

c++ - 在 C++11 中将 fstream 引用作为函数参数传递

c++ - 具有变化值的固定节点集的最佳树/堆数据结构+需要前 20 个值?

c++ - 如何在 C++ 中调用 void foo(int (&)[]) {}?

C++ String输出引用参数或返回值,有没有最优的处理方式?

c++ - 将 setw() 作为变量

c++ - 关于c++ lambda的问题(具有非自动存储持续时间)

c++ - 如何检查位域是否跨越所有位

C++ 消息包 : linker errors

c++ - 如何在控制台的三个不同列中一起打印三张 map ? C++

c++ - 如何将 wstring 转换为字符串?