マイクロソフトのVisual Studio 2015には、次のコード:C++否定し、オーバーロードの解決
foo
Error: more than one instance of overloaded function "function" matches the argument list:
function "foo(int8_t a)"
function "foo(int16_t a)"
argument types are: (int)
はここで何が起こっている:
void foo(int8_t a);
void foo(int16_t a);
void foo(int16_t a, int16_t b);
void f()
{
int8_t x /* = some value */;
foo(-int16_t(x)); // ERROR
}
は、次のようなメッセージを与えますか? "引数の型は:(int16_t)"と言うべきではありませんか?これには何かプロモーションがありますか?もしそうなら、私はどのようにプロモーションをオフにできますか?
整数を否定すると、整数に変換されます。どのような変換が正確に必要ですか(型変換と否定の両方) –
私は16ビット整数に 'x'を符号拡張し、その2の補数をとり、foo(int16_t a)に渡します。 そして私はコンピュータ上で32ビットのビットを持ちますが、なぜ世界で16ビット整数の否定が32ビット整数であるのでしょうか? – Isaac
キャストする前に否定します。否定は、32ビット整数に昇格します。 –