[過去ログ]
C++相談室 part165 (1002レス)
C++相談室 part165 http://mevius.5ch.net/test/read.cgi/tech/1698705458/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
210: デフォルトの名無しさん (オイコラミネオ MMeb-tjaG) [sage] 2024/02/06(火) 20:42:09.19 ID:WnlTLfV5M 「The C Standard says that array indexes are (signed) integers. The reason behind that is that pointers and arrays are close in C. For example, tab[index] is strictly equivalent to *(tab + index). You can use pointer arithmetic with negative values, hence an array index can be negative」 とあるので、C 言語での配列添え字は符号付き整数 ですね。 しかし、C++ では、size_t とされ、符合なし整数 のようですが、矛盾しませんか? VC++の以下のマクロでは、 #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] eが偽の時にエラーになるようになっているようです。 これはつまり、 typedef char aaa[-1]; がエラーになる事を前提にしているようです。 しかし、もし、配列の最大要素数が、符合なし整数 であるならば、32BIT 環境の場合、 -1 は、0xffff_ffff と同じと言えば同じであるはずで、 コンパイラ内部で効率よく区別するのは難しいはずです。 どうしてるんでしょう。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/210
211: デフォルトの名無しさん (オイコラミネオ MMeb-tjaG) [sage] 2024/02/06(火) 20:47:53.26 ID:WnlTLfV5M 何がいいたいかと言えば、32BIT環境だと 符号付き整数の最大値は、 0x7fff_ffff ですから、 char a[0x7fff_ffff]; は合法ですが、 char a[0xffff_ffff]; はエラーです。よって、 char a[-1]; はコンパイラは難しい処理をしなくても、 -1 は内部表現が 0xffff_ffff ですので そもそも範囲外の数値と見なせます。 ところが、もし、配列最大数が unsigned の領域まで許されるならば、要素数が 0xffff_ffff の配列も合法だということに なります。 ならば、要素数の[] の中に-1 を指定した 場合の処理は難しくなりそうだ、ということです。 なおそもそも、32BIT の Windows 環境 だと、ユーザーが使えるアドレス空間は 最大で 0x7fff_ffff 程度までですから、 バイト数的に確保は出来ませんが。 ならば、そもそも、C++がunsigned 型 であるところの、size_t を採用しているもの なかなか不可思議であります。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/211
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.739s*