sizeof 運算子

sizeof 運算子會產生運算元的大小 (以位元組為單位) ,這可以是類型的表示式或用括弧括住的名稱。

sizeof 運算子語法

讀取語法圖跳過視覺化語法圖sizeof expr(類型名稱)
任一類型運算元的結果不是 lvalue ,而是常數整數值。 結果的類型是標頭檔 stddef.h中定義的不帶正負號整數類型 size_t

除了前處理器指引之外,只要需要整數常數,就可以使用 sizeof 表示式。 sizeof 運算子最常用的其中一個用途是判定儲存體配置、輸入及輸出函數期間所參照的物件大小。

sizeof 的另一個用途是跨平台移轉程式碼。 您可以使用 sizeof 運算子來決定資料類型所代表的大小。 例如:
sizeof(int);

套用至類型名稱的 sizeof 運算子會產生該類型物件將使用的記憶體數量,包括任何內部或尾端填補。

對於複合類型,結果如下所示:
運算元 結果
陣列 結果是陣列中的位元組總數。 例如,在具有 10 個元素的陣列中,大小等於單一元素大小的 10 倍。 在評估表示式之前,編譯器不會將陣列轉換成指標。
C++ 類別 結果一律為非零,且等於該類別物件中的位元組數,包括在陣列中放置類別物件所需的任何填補。
C++ 參照 結果是所參照物件的大小。
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 具有類型 charshortint 或任何列舉類型,則該值也是 4。

C++ 僅限 C++11 的開頭。

sizeof...是 variadic 範本特性所引進的一元表示式運算子。 此運算子接受將參數套件命名為其運算元的表示式。 然後,它會展開參數套件,並傳回提供給參數套件的引數數目。 請看下列範例:
template<typename...T> void foo(T...args){
    int v = sizeof...(args);
}
在此範例中,變數 v 指派給為參數套件提供的引數數目args.
附註:
  • 的運算元sizeof...運算子必須是命名參數套件的表示式。
  • 的運算元sizeof運算子不能是命名參數套件或套件擴充的表示式。
如需相關資訊,請參閱 變式範本 (C++11)

C++ 僅限 C++11 結尾。