thisによると、型接尾辞のない整数リテラルは常にint
s です。ただし、gcc と clang はどちらも0xffffffff
(または を使用する以外に符号ビットを明示的に設定する任意のリテラル-
) を unsigned として解釈します。どちらが正しい?(これによると、コンパイラは)
2564 次
1 に答える
25
C++11 標準のパラグラフ 2.14.2/2 に従って、
整数リテラルの型は、その値を表すことができる表 6 の対応するリストの最初のものです。
表 6 は、16 進定数の場合、型は次のようにする必要があることを報告しています。
int
; または(収まらない場合)unsigned int
; または(収まらない場合)long int
; または(収まらない場合)unsigned long int
; または(収まらない場合)long long int
; またunsigned long long int
.
実装に 32 ビットがあると仮定すると、int
は0xffffffff
に収まらないためint
、その型は になりますunsigned int
。64 ビットの実装のint
場合、タイプは になりますint
。
同じリテラルを10 進定数として記述した場合、型は次のようになるだけであることに注意してください。
int
; または(収まらない場合)long int
; または(収まらない場合)long long int
.
于 2013-04-01T13:25:27.150 に答える