Share via


Operator für die explizite Typkonvertierung: ()

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

Syntax

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 );

Das folgende Beispiel veranschaulicht eine Point-Klasse.

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();
}

Output

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 dem die Funktionskonvertierung verwendet wird, zeigt, wie zwei Werte (einer für x und einer für y) in den benutzerdefinierten Typ Point konvertiert werden.

Achtung

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

Die cast-Notation muss für Konvertierungen in Typen verwendet werden, die kein simple-type-name (z. B. Zeiger oder Verweistypen) haben. Konvertierung in Typen, die mit einem simple-type-name ausgedrückt werden kann, kann in jeder Form geschrieben werden.

Eine Typdefinition innerhalb von Umwandlungen ist unzulässig.

Siehe auch

Postfixausdrücke
Integrierte C++-Operatoren, Rangfolge und Assoziativität