sizeof 運算子
sizeof
運算子會產生運算元的大小 (以位元組為單位) ,這可以是類型的表示式或用括弧括住的名稱。
除了前處理器指引之外,只要需要整數常數,就可以使用 sizeof
表示式。 sizeof
運算子最常用的其中一個用途是判定儲存體配置、輸入及輸出函數期間所參照的物件大小。
sizeof
的另一個用途是跨平台移轉程式碼。 您可以使用 sizeof
運算子來決定資料類型所代表的大小。 例如:sizeof(int);
套用至類型名稱的 sizeof
運算子會產生該類型物件將使用的記憶體數量,包括任何內部或尾端填補。
對於複合類型,結果如下所示:
運算元 | 結果 |
---|---|
陣列 | 結果是陣列中的位元組總數。 例如,在具有 10 個元素的陣列中,大小等於單一元素大小的 10 倍。 在評估表示式之前,編譯器不會將陣列轉換成指標。 |
類別 | 結果一律為非零,且等於該類別物件中的位元組數,包括在陣列中放置類別物件所需的任何填補。 |
參照 | 結果是所參照物件的大小。 |
sizeof
運算子可能未套用至:- 位元欄位
- 函數類型
- 未定義的結構或類別
- 不完整類型 (例如
void
)
套用至表示式的
sizeof
運算子所產生的結果與只套用至表示式類型名稱的結果相同。 在編譯時期,編譯器會分析表示式來判斷其類型。 表示式類型分析中發生的任何一般類型轉換都無法直接歸因於 sizeof
運算子。 不過,如果運算元包含執行轉換的運算子,編譯器在決定類型時,會將這些轉換納入考量。 例如,下列範例的第二行會導致執行一般算術轉換。 假設 short
使用 2 個位元組的儲存體,而 int
使用 4 個位元組,short x; … sizeof (x) /* the value of sizeof operator is 2 */
short x; … sizeof (x + 1) /* value is 4, result of addition is type int */
表示式 x + 1
的結果具有類型 int
,且相當於 sizeof(int)
。 如果 x
具有類型 char
、 short
或 int
或任何列舉類型,則該值也是 4。僅限 C++11 的開頭。
sizeof...是 variadic 範本特性所引進的一元表示式運算子。 此運算子接受將參數套件命名為其運算元的表示式。 然後,它會展開參數套件,並傳回提供給參數套件的引數數目。 請看下列範例:
template<typename...T> void foo(T...args){
int v = sizeof...(args);
}
在此範例中,變數 v 指派給為參數套件提供的引數數目args.附註:
如需相關資訊,請參閱 變式範本 (C++11)- 的運算元sizeof...運算子必須是命名參數套件的表示式。
- 的運算元sizeof運算子不能是命名參數套件或套件擴充的表示式。
僅限 C++11 結尾。
相關資訊