当对象是位值或用寄存器存储 class 声明时,为什么不能将左值解析为相应对象的地址?
Why can't a lvalue be resolved to the corresponding object's address, when the object is a bit-value or declared with the register storage class?
简而言之,来自 C:
An lvalue is an expression that designates an object, and it
can appear on the left side of an assignment operator.
An lvalue can always be resolved to the corresponding object’s
address, unless the object is a bit-field or a variable declared with the register storage class.
- 根据引用的第二句,当对象是
用寄存器存储 class 声明的位值或变量,
左值无法解析为相应对象的地址。
这是为什么?
给定一个无法解析为相应对象的左值
地址,左值如何指定一个对象,并出现在
赋值运算符的左侧?
我认为下面三种说法是等价的:
- 左值无法解析为相应对象的地址,
- 一个左值指定一个对象,
- 左值可以出现在赋值运算符的左侧。
并且它们中的任何一个都可以用作左值的定义。我是吗
对吗?
谢谢。
最小可寻址分辨率为 char
。如果你想要一个位域,那是一个或多个位 within a char
所以不能有自己的地址,除非你允许像 42.6
这样的地址让大多数程序员大吃一惊:-)
具有寄存器存储class的变量通常无法寻址,因为它们不一定存储在内存中的任何位置——毕竟,寄存器存储class的意思是:尝试将此值保存在寄存器中。
但是,即使您无法获得这些对象的 地址 ,这并不意味着您无法分配给它们。对于寄存器中保存的对象,您只需更改寄存器即可。
而且,对于位字段,您可以只使用像 and/or
这样的布尔运算来操作可寻址值的 部分 。
简而言之,来自 C:
An lvalue is an expression that designates an object, and it can appear on the left side of an assignment operator.
An lvalue can always be resolved to the corresponding object’s address, unless the object is a bit-field or a variable declared with the register storage class.
- 根据引用的第二句,当对象是 用寄存器存储 class 声明的位值或变量, 左值无法解析为相应对象的地址。 这是为什么?
给定一个无法解析为相应对象的左值 地址,左值如何指定一个对象,并出现在 赋值运算符的左侧?
我认为下面三种说法是等价的:
- 左值无法解析为相应对象的地址,
- 一个左值指定一个对象,
- 左值可以出现在赋值运算符的左侧。
并且它们中的任何一个都可以用作左值的定义。我是吗 对吗?
谢谢。
最小可寻址分辨率为 char
。如果你想要一个位域,那是一个或多个位 within a char
所以不能有自己的地址,除非你允许像 42.6
这样的地址让大多数程序员大吃一惊:-)
具有寄存器存储class的变量通常无法寻址,因为它们不一定存储在内存中的任何位置——毕竟,寄存器存储class的意思是:尝试将此值保存在寄存器中。
但是,即使您无法获得这些对象的 地址 ,这并不意味着您无法分配给它们。对于寄存器中保存的对象,您只需更改寄存器即可。
而且,对于位字段,您可以只使用像 and/or
这样的布尔运算来操作可寻址值的 部分 。