25

thisによると、型接尾辞のない整数リテラルは常にints です。ただし、gcc と clang はどちらも0xffffffff(または を使用する以外に符号ビットを明示的に設定する任意のリテラル-) を unsigned として解釈します。どちらが正しい?(これによるとコンパイラは)

4

1 に答える 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 ビットがあると仮定すると、int0xffffffffに収まらないためint、その型は になりますunsigned int。64 ビットの実装のint場合、タイプは になりますint

同じリテラルを10 進定数として記述した場合、型は次のようになるだけであることに注意してください。

  • int; または(収まらない場合)
  • long int; または(収まらない場合)
  • long long int.
于 2013-04-01T13:25:27.150 に答える