Operador de conversão de tipo explícito: ()
O C++ permite a conversão de tipos explícita usando uma sintaxe semelhante à sintaxe de chamada de função.
Sintaxe
simple-type-name ( expression-list )
Comentários
Um simple-type-name seguido por um expression-list entre parênteses constrói um objeto do tipo especificado usando as expressões especificadas. O exemplo a seguir mostra uma conversão de tipo explícita para o tipo int:
int i = int( d );
O exemplo a seguir mostra uma classe Point
.
Exemplo
// 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();
}
Saída
x = 20, y = 10
x = 0, y = 0
Embora o exemplo acima demonstre a conversão de tipos explícita usando constantes, a mesma técnica funciona para executar essas conversões em objetos. O fragmento de código a seguir demonstra isso:
int i = 7;
float d;
d = float( i );
As conversões de tipos explícitas também podem ser especificadas usando a sintaxe em estilo "cast". O exemplo anterior, reescrito usando a sintaxe "cast", fica assim:
d = (float)i;
As conversões em estilo "cast" e em estilo de função têm os mesmos resultados na conversão de valores únicos. Porém, na sintaxe em estilo de função, você pode especificar mais de um argumento para a conversão. Essa diferença é importante para os tipos definidos pelo usuário. Considere uma classe Point
e as respectivas conversões:
struct Point
{
Point( short x, short y ) { _x = x; _y = y; }
...
short _x, _y;
};
...
Point pt = Point( 3, 10 );
O exemplo acima, que usa a conversão em estilo de função, mostra como converter dois valores (um para x e um para y) no tipo definido pelo usuário Point
.
Cuidado
Use as conversões de tipos explícitas com cuidado, já que elas substituem a verificação de tipos interna do compilador do C++.
A notação cast deve ser usada para conversões em tipos que não têm um simple-type-name (tipos de ponteiro ou referência, por exemplo). A conversão em tipos que podem ser expressos com um simple-type-name pode ser escrita em qualquer um dos dois formatos.
A definição de tipo nas conversões em estilo "cast" é ilegal.
Confira também
Expressões pós-fixadas
Operadores internos C++, precedência e associatividade
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de