この関数があると想像してください:
void foo(long l) { /* do something with l */}
これで、呼び出しサイトで次のように呼び出します。
foo(65); // here 65 is of type int
なぜ、(技術的に) 関数の宣言で a を期待していることを指定しlong
、接尾辞なしで数値だけを渡すと、L
それは として扱われるのint
ですか?
さて、C++ 標準がそう言っているためであることはわかっていますが、これ65
が型に昇格されただけでなく、サフィックスをlong
忘れて明示的に long にするというばかげたエラーを回避する技術的な理由は何ですか?L
C++標準でこれを見つけました:
4.7 積分変換 [conv.integral]
5 インテグラル プロモーションとして許可されているコンバージョンは、インテグラル コンバージョンのセットから除外されます。
縮小変換が暗黙的に行われていないことは考えられますが、ここでは宛先の型がソースの型よりも明らかに広くなっています。
編集
この質問は、サフィックス を指定しなかった場合に奇妙な動作があった、以前に見た質問に基づいています。Exampleですが、おそらくそれは C++ よりも C のことでしょうか?!!L