Freigeben über


Operator für die explizite Typkonvertierung: ()

C++ lässt die explizite Typkonvertierung mithilfe der Syntax ähnlich der Syntax des Funktionsaufrufs zu.

simple-type-name ( expression-list )

Hinweise

simple-type-name gefolgt von expression-list in Klammern erstellt ein Objekt des angegebenen Typs mithilfe der angegebenen Ausdrücke. Das folgende Beispiel zeigt eine explizite Typkonvertierung in den Typ "int":

int i = int( d );

Im folgenden Beispiel wird eine modifizierte Version der Klasse Point verwendet, die in Funktionsaufrufergebnisse definiert wird.

Beispiel

// expre_Explicit_Type_Conversion_Operator.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class Point
{
public:
    // Define default constructor.
    Point() { _x = _y = 0; }
    // Define another constructor.
    Point( int X, int Y ) { _x = X; _y = Y; }

    // Define "accessor" functions as
    // reference types.
    unsigned& x() { return _x; }
    unsigned& y() { return _y; }
    void Show()   { cout << "x = " << _x << ", "
                         << "y = " << _y << "\n"; }
private:
    unsigned _x;
    unsigned _y;
};

int main()
{
    Point Point1, Point2;

    // Assign Point1 the explicit conversion
    //  of ( 10, 10 ).
    Point1 = Point( 10, 10 );

    // Use x() as an l-value by assigning an explicit
    //  conversion of 20 to type unsigned.
    Point1.x() = unsigned( 20 );
    Point1.Show();

    // Assign Point2 the default Point object.
    Point2 = Point();
    Point2.Show();
}

Ausgabe

x = 20, y = 10
x = 0, y = 0

Obwohl das obige Beispiel die explizite Typkonvertierung mithilfe von Konstanten demonstriert, funktioniert das gleiche Verfahren, um diese Konvertierungen für Objekte auszuführen. Der folgende Codeausschnitt stellt dies dar:

int i = 7;
float d;

d = float( i );

Explizite Typkonvertierungen können mithilfe der "cast"-Syntax ebenfalls angegeben werden. Das vorherige Beispiel, das mithilfe der Umwandlungssyntax neu geschrieben wird, lautet:

d = (float)i;

Umwandlungs- und Funktionskonvertierungen haben dieselben Ergebnisse beim Konvertieren von Einzelwerten. In der Funktionsformatsyntax können Sie mehr als ein Argument für die Konvertierung angeben. Dieser Unterschied ist für benutzerdefinierte Typen wichtig. Betrachten Sie eine Point-Klasse und ihre Konvertierungen:

struct Point
{
    Point( short x, short y ) { _x = x; _y = y; }
    ...
    short _x, _y;
};
...
Point pt = Point( 3, 10 );

Das vorhergehende Beispiel, in die Funktionskonvertierung verwendet wird, zeigt, wie zwei Werte (einer für x und einer für y) in den benutzerdefinierten Typ Point konvertiert werden.

Warnung

Verwenden Sie die expliziten Typkonvertierungen mit Bedacht, da sie die integrierte Typüberprüfung des C++-Compilers überschreiben.

Die cast-Schreibweise muss für Konvertierungen in Typen verwendet werden, die keinen simple-type-name (z. B. Zeiger oder Referenztypen) haben. Konvertierung in Typen, die mit einem simple-type-name ausgedrückt werden kann, kann in jeder Form geschrieben werden. Weitere Informationen zu den Bedingungen für simple-type-name finden Sie unter Typbezeichner.

Eine Typdefinition innerhalb von Umwandlungen ist unzulässig.

Siehe auch

Referenz

Postfixausdrücke

C++-Operatoren

C++-Operatoren, Rangfolge und Assoziativität