Ada 编程/属性/'Size
外观
R'Size 是一个 表示属性,用于获取对象或类型的位数。
- 当应用于对象时,'Size 返回分配给存储对象的实际位数。
- 当应用于子类型时,'Size 返回最小的 n,使得所有值都适合范围 0 .. 2n-1(仅对于正值),否则为 -2n-1 .. 2n-1-1。
'Size 属性也可以在属性定义子句中使用,以设置第一个子类型的尺寸。在特殊情况下,甚至可以通过使用小于上述 n 的值来强制使用有偏差的表示。
此子类型允许使用仅有三位数的有偏差表示,因为它只包含八个值。
type
Tis
range
1000 .. 1007;for
T'Sizeuse
3;
如果没有大小子句,T'Size 将返回 10,因为 210-1 = 1023。
with
Ada.Text_IO;procedure
Attributes_Sizeis
package
T_IOrenames
Ada.Text_IO;package
I_IOis
new
Ada.Text_IO.Integer_IO (Integer); A_Boolean :constant
Boolean := True;begin
T_IO.Put ("Size of Boolean type = "); -- An enumeration with I_IO.Put (Boolean'Size); -- 2 values fits into T_IO.New_Line; -- 1 bit. T_IO.Put ("Size of Boolean Object = "); -- it is more efficient I_IO.Put (A_Boolean'Size); -- to store a boolean T_IO.New_Line; -- as an entire byteend
Attributes_Size;
使用 GNAT 10.2.0 的输出将是
Size of Boolean type = 1 Size of Boolean Object = 8
自己尝试一下,看看你的编译器是如何做的。
Size 的值也可以使用属性定义子句指定。例如,以下声明指定了与 C99 兼容的 bool
type
Boolis
new
Boolean;for
Bool'Sizeuse
Interfaces.C.int'Size;
一个常见的 Ada 编程错误是假设为类型 T 指定 'Size 会强制编译器为这种类型的对象分配正好这个数量的位。这不是真的。指定的 T'Size 将强制编译器在打包数组和记录的组件中以及在 Unchecked_Conversion 中使用此大小,但编译器仍然可以自由地为独立对象分配更多位。
在对象本身使用 'Size 来强制对象使用指定的值。