C++ Primer 5th第19章位域示例中mode枚举设计是否存在逻辑错误?
结论先行:这个示例确实存在设计疏漏,你的判断完全正确。
- 常规的独立权限位设计要求每个权限对应单独的比特位,正确的定义应该是:
这样每个权限的位与操作结果互斥,不会出现你说的enum modes { READ = 01, WRITE = 02, EXECUTE = 04 };EXECUTE & WRITE非零的问题。而示例中把EXECUTE定义为03(二进制11),本质是把它变成了READ | WRITE的组合值,完全不符合独立权限的设计逻辑。 - 这个问题的核心原因是:该示例的唯一目的是演示位域的语法用法,而非实现一个严谨的文件权限系统。你可以注意到整个示例代码里根本没有任何处理
EXECUTE权限的逻辑,这个枚举值只是随手补充的冗余内容,作者写的时候并没有考虑实际的权限判断逻辑。 - 另外示例里给
mode位域只分配了2位的存储空间,最多只能表示4种状态,本来就放不下三个独立的权限位,也侧面说明这只是一个语法演示代码,不能直接用于生产环境。
内容的提问来源于stack exchange,提问作者Itachi Uchiwa
相关产品推荐
相关产品推荐

