Introdução à conversão de tipo cast em C++

Introdução à conversão de tipo cast em C++

Em C++, cast é uma sintaxe para conversão entre tipos de dados incompatíveis. Ele fornece uma maneira conveniente de converter explicitamente um tipo de dados em outro. Deve-se observar que a conversão de tipo pode causar perda ou estouro de precisão dos dados, portanto, você precisa ter cuidado ao usá-la.

C++ fornece dois estilos de conversão: conversões no estilo C e conversões no estilo C++.

★C++ fornece dois tipos de conversão:

★ Elenco de estilo C: use a notação de parênteses, por exemplo:

interno x = 10; 

double y = (double)x; // Converte x para tipo double

★Conversão estilo C++, fornecendo quatro operadores de conversão:

☆static_cast: conversão de tipo estático. Ele pode converter entre tipos relacionados, como converter um ponteiro de classe base em um ponteiro de classe derivada ou converter um número inteiro em um número de ponto flutuante. static_cast não requer suporte a informações de tipo de tempo de execução. Este é um operador de conversão de tipo C++ e seu formato de sintaxe é:

static_cast<tipo de destino>(valor a ser convertido)

Dentre eles, o tipo de destino representa o tipo para o qual o valor a ser convertido é convertido. O valor a ser convertido pode ser qualquer tipo que seja implicitamente conversível no tipo de destino.

Por exemplo:

interno x = 10; 

double y = static_cast<double>(x); // Converte x para tipo double

☆reinterpret_cast: Reinterpreta a conversão de tipo. É usado principalmente para converter ponteiros de classe base em ponteiros de tipos não relacionados, como converter ponteiros de classe base em ponteiros void*. Essa conversão pode causar erros de tempo de execução porque pode violar a segurança de tipo. reinterpret_cast não requer suporte de informações de tipo de tempo de execução. Por exemplo:

intuma = 10; 

int*p = &a; 

char* c = reinterpret_cast<char*>(p); // Converte o ponteiro para o tipo char*

☆const_cast: conversão de tipo constante. É usado para converter um objeto constante em um objeto não constante ou um objeto não constante em um objeto constante. const_cast não requer suporte a informações de tipo de tempo de execução. Por exemplo:

const int a = 10; 

int* p = const_cast<int*>(&a); // Remove atributos const 

*p = 20; // O valor de a pode ser modificado

☆dynamic_cast: conversão de tipo dinâmico. É usado principalmente para conversões ascendentes e descendentes em tipos polimórficos, como a conversão de um ponteiro de classe base em um ponteiro de classe derivada. dynamic_cast requer suporte a informações de tipo de tempo de execução, portanto, quando o compilador não habilita informações de tipo de tempo de execução, isso pode causar erros de programa. Por exemplo:

classe Base {}; 

classe Derivada: base pública {}; 

Base* b = new Derived; // Transformação ascendente 

Derived* d = dynamic_cast<Derived*>(b); // Conversão de tipo dinâmico 

if (d! = nullptr) { 

    //conversão bem sucedida 

} outro { 

    // falha na conversão 

}

Deve-se observar que a conversão forçada de tipo pode trazer certos riscos, como incompatibilidade de tipo, estouro e comportamento indefinido, portanto, você deve garantir que a conversão seja razoável ao usá-la.

Aqui está um exemplo completo de conversão de uma variável do tipo double em uma variável do tipo int:

#include <iostream>
using namespace std;

int main() {
    double d = 3.1415926535897;
    int i = (int)d;   // C风格将double类型的d转换成int类型的i
    int j = static_cast<int>(d);   // C++风格将double类型的d转换成int类型的j
    cout << "i = " << i << endl;   // 输出转换后的值i:3
    cout << "j = " << j << endl;   // 输出转换后的值j:3

    return 0;
}

Acho que você gosta

Origin blog.csdn.net/cnds123/article/details/132635358
Recomendado
Clasificación