Udostępnij za pośrednictwem


Operator jawnej konwersji typu: ()

Język C++ pozwala na jawną konwersję typu przy użyciu składni podobnej do składni wywołania funkcji.

simple-type-name ( expression-list )

Uwagi

Simple-type-name z następującą po nim expression-list ujętą w nawiasy okrągłe, konstruuje obiekt określonego typu przy użyciu określonych wyrażeń.W poniższym przykładzie pokazano jawną konwersję typu na int.

int i = int( d );

Poniższy przykład używa zmodyfikowanej wersji klasy Point zdefiniowanej w Wyniki wywołań funkcji.

Przykład

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

Dane wyjściowe

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

Mimo że w poprzednim przykładzie zademonstrowano jawną konwersję typu przy użyciu stałych, ta sama technika działa przy wykonywaniu tych konwersji na obiektach.Demonstruje to poniższy fragment kodu:

int i = 7;
float d;

d = float( i );

Jawne konwersje typu mogą być również określone przy użyciu składni rzutowania.Poprzedni przykład przepisany przy użyciu składni rzutowania:

d = (float)i;

Zarówno rzutowanie, jak i konwersje w stylu funkcji, dają te same wyniki podczas konwertowania z pojedynczych wartości.Jednakże, w składni o stylu funkcji możesz określić więcej niż jeden argument konwersji.Różnica jest ważna dla typów zdefiniowanych przez użytkownika.Rozważ klasę Point i jej konwersje:

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

Poprzedni przykład, który używa konwersji w stylu funkcji, pokazuje w jaki sposób konwertować dwie wartości (jedną dla x, a drugą dla y) na typ Point zdefiniowany przez użytkownika.

Informacje dotyczące przestrogiPrzestroga

Używaj jawnej konwersji typu z rozwagą, ponieważ zastępuje ona wbudowaną w kompilator kontrolę typów języka C++.

Notacja rzutowania musi być używana podczas konwersji na typy, które nie posiadają simple-type-name (na przykład typy wskaźnikowe lub odwołania).Konwersja na typy, które mogą być wyrażone za pomocą simple-type-name może być zapisana w dowolnej postaci.Zobacz Specyfikatory typu, aby uzyskać więcej informacji dotyczących tego, co stanowi simple-type-name.

W ramach rzutowań niedozwolone są definicje typu.

Zobacz też

Informacje

Wyrażenia przyrostków

Operatory języka C++

Operatory, pierwszeństwo i kojarzenie języka C++