为何en.cppreference.com在value category规则中区分object与bit-field?
关于cppreference prvalue定义中区分object与bit-field的说明
首先纠正核心认知偏差:你对bit-field的范畴理解存在误区——普通基础类型(int、double等)、数组、结构体都属于标准定义的普通对象,只有显式使用标识符(可选) 属性(可选) : 长度语法声明的类成员才属于此处专门提及的bit-field(位域),基础类型本身不属于bit-field范畴。
接下来解释二者并列的原因:
位域是C++标准中约定的特殊对象类别,存在大量和普通对象完全不同的语法约束:
- 普通对象支持取地址操作,有确定的内存对齐要求,大小为
sizeof返回的整数字节数,可以绑定非常量左值引用,也可以作为临时量实质化的结果对象 - 位域不允许取地址,没有稳定的内存地址,可能跨字节存储,无法绑定非常量左值引用,也不能成为临时量实质化生成的结果对象
prvalue的核心作用之一是为目标实体提供初始值,cppreference在定义中专门把bit-field和普通object并列,本质是明确prvalue初始化的合法目标覆盖这两类不同的实体:如果只写「初始化object」,位域这类特殊实体的初始化场景就没有对应的规则覆盖,需要单独列出来做补充说明,没有其他特殊引申含义。这也和你提到的prvalue结果对象规则完全对应:位域只能作为类成员被prvalue初始化,不属于可以被临时量实质化生成的结果对象范畴。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

