Ada 程式設計/屬性/'Size
外觀
R'Size 是一個 表示屬性,用於獲取物件或型別的位數。
- 當應用於物件時,'Size 返回分配給儲存物件的實際位數。
- 當應用於子型別時,'Size 返回最小的 n,使得所有值都適合範圍 0 .. 2n-1(僅對於正值),否則為 -2n-1 .. 2n-1-1。
'Size 屬性也可以在屬性定義子句中使用,以設定第一個子型別的尺寸。在特殊情況下,甚至可以透過使用小於上述 n 的值來強制使用有偏差的表示。
此子型別允許使用僅有三位數的有偏差表示,因為它只包含八個值。
typeTisrange1000 .. 1007;forT'Sizeuse3;
如果沒有大小子句,T'Size 將返回 10,因為 210-1 = 1023。
withAda.Text_IO;procedureAttributes_SizeispackageT_IOrenamesAda.Text_IO;packageI_IOisnewAda.Text_IO.Integer_IO (Integer); A_Boolean :constantBoolean := True;beginT_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 byteendAttributes_Size;
使用 GNAT 10.2.0 的輸出將是
Size of Boolean type = 1 Size of Boolean Object = 8
自己嘗試一下,看看你的編譯器是如何做的。
Size 的值也可以使用屬性定義子句指定。例如,以下宣告指定了與 C99 相容的 bool
typeBoolisnewBoolean;forBool'SizeuseInterfaces.C.int'Size;
一個常見的 Ada 程式設計錯誤是假設為型別 T 指定 'Size 會強制編譯器為這種型別的物件分配正好這個數量的位。這不是真的。指定的 T'Size 將強制編譯器在打包陣列和記錄的元件中以及在 Unchecked_Conversion 中使用此大小,但編譯器仍然可以自由地為獨立物件分配更多位。
在物件本身使用 'Size 來強制物件使用指定的值。
