thisによると、型接尾辞のない整数リテラルは常にints です。ただし、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 に答える