const限定符作用于结构体的疑问:成员是否继承const属性?
const结构体的只读机制解析
先看你写的代码:
struct point { int x; int y; }; const struct point p = {1, 2}; p.x = 3; // 触发编译错误
编译器报的错误"assignment of member 'x' in read only object",本质是因为你把整个结构体对象p声明成了const类型,这直接导致p的所有成员都被视为只读的,不能被赋值修改。
具体机制是这样的:
- 当你写
const struct point p时,p的类型是const struct point,不是普通的struct point变量加const标记。这意味着p是一个const限定的结构体对象,整个对象的内存空间都被标记为只读。 - 对const对象的任何成员访问,都会被编译器视为const类型的成员——比如
p.x会被当作const int,而C语言里不允许给const类型的左值赋值,所以编译器直接报错。
简单说,不是成员"继承"了const属性,而是整个p对象是只读的,它的所有成员自然也就不能被修改。哪怕结构体里的成员原本是普通可读写的int,只要所属的对象是const,这些成员就会被编译器限制为只读。
内容的提问来源于stack exchange,提问作者xdevel2000
相关产品推荐
相关产品推荐

