ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
C/C++/C#/Delphiなどで、値型のサイズを取得する機能。
C/C++では予約語の一つであり、単項演算子である。つまりCにおいては、sizeofは関数ではなく演算子である。
sizeof(foo)のように使われることが多いが、演算子なので()は必ずしも必要ではない。sizeof fooで求めることができる。但しintのような「型」の場合や、C++11から追加された可変長引数のtemplateの場合は()が必要である。
結果はsize_t型で返される。
Cにおいては、sizeofは定数式ではない。C90までは定数式と考えても差し支えなかったが、C99では「可変長配列」が導入されたため、そうではなくなった。
int func(int n)
{
int array[n];
...
}
この関数中で「sizeof array」を求めた場合、理論上はsizeof(int)*nが求められる。しかしこの大きさは、実際に関数が呼ばれるまでは分からないため、定数式とならない。
従って、switch文のラベルなど定数式が要求される箇所にsizeofを使うことはできない。
C++においては、当初の仕様ではsizeofは定数式である。switch文のラベルにsizeofを書くことができる。
しかしC++ではC99の機能が積極的に取り込まれていることもあり、将来的に上述のような可変長配列がもし導入された場合、定数式ではなくなる。
規格では、整数型のサイズは、次のように定義されている。
sizeof(short) ≦ sizeof(int) ≦ sizeof(long)
C/C++では、このように大小関係のみが定義されており、実際のビット長などは定義されていない。
また仕様上、sizeof(char)は常に1であることが求められている。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます