methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

sizeof()はやっぱりバイト数を返す?

プログラミング言語C++の5.3.1に、こう書いてある。

T*型のポインタpに対して算術演算子を適用するとき、pはT型オブジェクトの配列の要素を指しているものとみなされる。p+1は、配列内の次の要素、p-1は手前の要素を指す。そのため、p+1の整数値は、pの整数値よりも、sizeof(T)だけ大きいということになる。

ポインタ変数にアドレスが入っていると仮定すると、sizeof演算子が返すサイズの単位が、アドレスの単位と等しいことになる。しかし、4.6には、こう書いてあった。

C++オブジェクトのサイズは、charのサイズの倍数によって表現出きるので、定義上、charのサイズは1とされている。オブジェクトの型やサイズは、sizeof演算子によって取得できる。

そして、その下に、 l1≡sizeof(char)と書かれている。このl1は誤植だろうか?とりあえず、正誤表にはこの部分の訂正は無い。

アドレスが指し示す単位を1ワードとしたときに、char型のサイズは1ワードのサイズと等しくないといけないという事だろうか?そうすると、1ワードが8bit以下のシステムでは、C++の規格に準拠したコンパイラは作れないことになる。プログラミング言語C++を読めばC++の規格を正確に把握できるかと思ったのだが、sizeof演算子すら他人に説明するほど理解できていない。あとで規格書読もう。