In Microsoft Visual Studio 2015 den folgenden Code ein:C++ Negation und Überladungsauflösung
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
}
gibt die folgende Meldung:
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)
Was ist hier los? Sollte es nicht heißen "Argumenttypen sind: (int16_t)"? Hat das etwas mit Werbung zu tun? Wenn ja, wie kann ich Werbung deaktivieren?
Das Negieren der Ganzzahl konvertiert sie in ein 'int'. Welche Art von Konvertierung möchten Sie genau (sowohl Typkonvertierung als auch Negation)? –
Ich möchte es Zeichen 'X' zu einer 16-Bit-Ganzzahl, nehmen Sie die Zweier-Kompliment, und dann übergeben Sie es an foo (int16_t a) Und ich glaube Int ist 32-Bit auf meinem Computer, Warum also in der Welt ist die Negation einer 16-Bit-Ganzzahl eine 32-Bit-Ganzzahl? – Isaac
Negieren Sie vor dem Casting. Negieren fördert zu einer 32-Bit-Ganzzahl. –