Freigeben über


Mehrdeutigkeits-Auflösung

Um explizite Konvertierungen von einem Typ in einen anderen auszuführen, müssen Sie die Umwandlungen verwenden und den gewünschten Typnamen angeben.Einige Typumwandlungen syntaktische Mehrdeutigkeiten ergeben.Die folgende FUNCTIONFormat Typumwandlung ist mehrdeutig:

char *aName( String( s ) );

Es ist unklar, ob eine Funktionsdeklaration oder eine Objektdeklaration mit einem FUNCTION Format aufweist, das als Initialisierer umgewandelt wird: Es könnte eine Funktion Typ deklarieren, die char * zurückgibt, der ein Argument vom Typ Stringakzeptiert, oder es kann das Objekt aName deklarieren und mit dem Wert von s Umwandlung initialisieren, um Stringeinzugeben.

Wenn eine Deklaration betrachtet werden kann als eine gültige Funktionsdeklaration, wird sie als solcher behandelt.Nur wenn keine Funktionsdeklaration sein kann u. U. h. wenn sie syntaktisch falsch ist, ist eine Anweisung, die überprüft wird, um festzustellen, ob es sich um eine FUNCTION Format Typumwandlung ist.Deshalb behandelt der Compiler die Anweisung eine als Deklaration einer Funktion und ignoriert die Klammern um den Bezeichner s.Umgekehrt die Anweisungen:

char *aName( (String)s );

und

char *aName = String( s );

eindeutig sind Deklarationen von Objekten und eine benutzerdefinierte Konvertierung vom Typ String , um char * eingeben wird aufgerufen, um die Initialisierung eines aNameauszuführen.

Siehe auch

Referenz

C++-abstrakte Deklaratoren