sizeof 演算子sizeof Operator

型のサイズに対するオペランドのサイズが得られますcharします。Yields the size of its operand with respect to the size of type char.


については、sizeof ...演算子を参照してください楕円および可変個引数テンプレートします。For information about the sizeof ... operator, see Ellipses and Variadic Templates.


sizeof unary-expression
sizeof  ( type-name )


結果、 sizeof演算子size_t、インクルード ファイルで定義されている整数型<stddef.h >。The result of the sizeof operator is of type size_t, an integral type defined in the include file <stddef.h>. この演算子を使うと、コンピューターに依存するデータ サイズをプログラムで指定せずに済みます。This operator allows you to avoid specifying machine-dependent data sizes in your programs.

オペランドsizeof次のいずれかを指定できます。The operand to sizeof can be one of the following:

  • 型の名前。A type name. 使用するsizeof型の名前を持つ名前をかっこで囲む必要があります。To use sizeof with a type name, the name must be enclosed in parentheses.

  • 任意の式を指定します。An expression. 式を使用するとsizeofまたはかっこがない場合に指定することができます。When used with an expression, sizeof can be specified with or without the parentheses. 式は評価されません。The expression is not evaluated.

ときに、 sizeof演算子は型のオブジェクトに適用char1 になります。When the sizeof operator is applied to an object of type char, it yields 1. ときに、 sizeof演算子が配列に適用される場合、配列識別子によって表されるポインターのサイズではなく、その配列内のバイトの合計数になります。When the sizeof operator is applied to an array, it yields the total number of bytes in that array, not the size of the pointer represented by the array identifier. 配列識別子によって表されるポインターのサイズを取得することをパラメーターとして渡す関数を使用するsizeofします。To obtain the size of the pointer represented by the array identifier, pass it as a parameter to a function that uses sizeof. 例:For example:


#include <iostream>
using namespace std;

size_t getPtrSize( char *ptr )
   return sizeof( ptr );

int main()
   char szHello[] = "Hello, world!";

   cout  << "The size of a char is: "
         << sizeof( char )
         << "\nThe length of " << szHello << " is: "
         << sizeof szHello
         << "\nThe size of the pointer is "
         << getPtrSize( szHello ) << endl;

出力例Sample Output

The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4

ときに、 sizeof演算子に適用されます、classstruct、またはunion型、結果は、そのオブジェクト内のバイトの数単語の境界にメンバーをアラインする追加の埋め込みと入力します。When the sizeof operator is applied to a class, struct, or union type, the result is the number of bytes in an object of that type, plus any padding added to align members on word boundaries. 結果は、個々のメンバーのストレージ要件を追加することで計算されたサイズには必ずしも対応しません。The result does not necessarily correspond to the size calculated by adding the storage requirements of the individual members. /Zpコンパイラ オプションおよびパックプラグマは、メンバーのアラインメント境界に影響します。The /Zp compiler option and the pack pragma affect alignment boundaries for members.

Sizeof演算子は空のクラスの場合でも、0 を生成することはありません。The sizeof operator never yields 0, even for an empty class.

Sizeof演算子は、次のオペランドでは使用できません。The sizeof operator cannot be used with the following operands:

  • 関数Functions. (ただし、 sizeof関数へのポインターに適用できます)。(However, sizeof can be applied to pointers to functions.)

  • ビット フィールド。Bit fields.

  • 定義されていないクラス。Undefined classes.

  • voidします。The type void.

  • 動的に割り当てられる配列。Dynamically allocated arrays.

  • 外部配列。External arrays.

  • 不完全な型。Incomplete types.

  • かっこで囲まれた不完全な型の名前。Parenthesized names of incomplete types.

ときに、 sizeof演算子は参照に適用、結果は、同じまるでsizeofオブジェクト自体に適用されている必要があります。When the sizeof operator is applied to a reference, the result is the same as if sizeof had been applied to the object itself.

可変長配列が構造体の最後の要素の場合、 sizeof演算子は配列のない構造体のサイズを返します。If an unsized array is the last element of a structure, the sizeof operator returns the size of the structure without the array.

Sizeof形式の式を使用して、配列内の要素の数を計算する演算子が使用される多くの場合。The sizeof operator is often used to calculate the number of elements in an array using an expression of the form:

sizeof array / sizeof array[0]

関連項目See also

単項演算子を含む式Expressions with Unary Operators