Sdílet prostřednictvím


Operátor převodu explicitního typu: ()

Jazyk C++ umožňuje explicitní převod typu pomocí syntaxe podobné syntaxi volání funkce.

simple-type-name ( expression-list )

Poznámky

Název simple-type-name následovaný seznamem expression-list uzavřeným v závorkách vytvoří objekt zadaného typu pomocí zadaného výrazu.Následující příklad ukazuje explicitní převod typu na typ int:

int i = int( d );

Následující příklad používá upravenou verzi třídy Point definované v tématu Výsledky volání funkce.

Příklad

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

Výsledek

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

Ačkoli předchozí příklad ukazuje explicitní převod typu s použitím konstant, stejný postup funguje při provádění těchto převodů s objekty.Následující fragment kódu to demonstruje:

int i = 7;
float d;

d = float( i );

Explicitní převody typu lze zadat také pomocí syntaxe „přetypování“.Předchozí příklad přepsaný pomocí syntaxe přetypování je:

d = (float)i;

Při převodu z jedné hodnoty převody pomocí přetypování a převody stylu funkce vrací stejné výsledky.Avšak u syntaxe stylu funkce lze zadat více než jeden argument převodu.Tento rozdíl je důležitý pro uživatelem definované typy.Zvažte třídu Point a její převody:

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

Předchozí příklad, který používá převod stylu funkce, ukazuje, jak převést dvě hodnoty (proměnnou x a proměnnou y) na uživatelem definovaný typ Point.

Poznámka k upozorněníUpozornění

Explicitní převody typu používejte opatrně, protože přepisují vestavěnou kontrolu typů kompilátoru jazyka C++.

Pro převod na typy, které nemají název simple-type-name (například, ukazatel nebo odkazy) musí být použit zápis přetypování.Převod na typy, které lze vyjádřit pomocí názvu simple-type-name mohou být napsány v obou tvarech.Další informace o tom co lze dosadit jako název simple-type-name, naleznete v tématu Specifikátory typu.

Definice typu v rámci přetypování jsou neplatné.

Viz také

Referenční dokumentace

Výrazy přípony

Operátory jazyka C++

Operátory C++, priorita a asociativita