Introducción a la conversión de tipos de conversión en C++

Introducción a la conversión de tipos de conversión en C++

En C++, cast es una sintaxis para convertir entre tipos de datos que no coinciden. Proporciona una manera conveniente de convertir explícitamente un tipo de datos en otro. Cabe señalar que la conversión de tipos puede causar pérdida o desbordamiento de precisión de los datos, por lo que debe tener cuidado al usarla.

C++ proporciona dos estilos de conversiones: conversiones estilo C y conversiones estilo C++.

★C++ proporciona dos tipos de conversiones:

★Edición de estilo C: use notación entre paréntesis, por ejemplo:

entero x = 10; 

double y = (double)x; // Convierte x a tipo doble

★ Reparto estilo C++, que proporciona cuatro operadores de reparto:

☆static_cast: conversión de tipo estático. Puede realizar conversiones entre tipos relacionados, como convertir un puntero de clase base en un puntero de clase derivada o convertir un número entero en un número de punto flotante. static_cast no requiere soporte de información de tipo de tiempo de ejecución. Este es un operador de conversión de tipo C++ y su formato de sintaxis es:

static_cast<tipo de destino>(valor a convertir)

Entre ellos, el tipo de destino representa el tipo al que se convierte el valor a convertir. El valor a convertir puede ser cualquier tipo que sea implícitamente convertible al tipo de destino.

Por ejemplo:

entero x = 10; 

double y = static_cast<double>(x); // Convierte x a tipo doble

☆reinterpret_cast: reinterpreta la conversión de tipo. Se utiliza principalmente para convertir punteros de clase base en punteros de tipos no relacionados, como convertir punteros de clase base en punteros void*. Esta conversión puede provocar errores de tiempo de ejecución porque puede violar la seguridad de tipos. reinterpret_cast no requiere soporte de información de tipo de tiempo de ejecución. Por ejemplo:

int a = 10; 

int*p = &a; 

char* c = reinterpret_cast<char*>(p); // Convertir puntero al tipo char*

☆const_cast: conversión de tipo constante. Se utiliza para convertir un objeto constante en un objeto no constante, o un objeto no constante en un objeto constante. const_cast no requiere soporte de información de tipo de tiempo de ejecución. Por ejemplo:

constante int a = 10; 

int* p = const_cast<int*>(&a); // Elimina atributos constantes 

*p = 20; // El valor de a se puede modificar

☆dynamic_cast: conversión de tipo dinámico. Se utiliza principalmente para conversiones hacia arriba y hacia abajo en tipos polimórficos, como convertir un puntero de clase base en un puntero de clase derivada. Dynamic_cast requiere soporte de información de tipo de tiempo de ejecución, por lo que cuando el compilador no habilita la información de tipo de tiempo de ejecución, puede provocar errores en el programa. Por ejemplo:

base de clase {}; 

clase Derivada: Base pública {}; 

Base* b = nueva Derivada; // Transformación ascendente 

Derivado* d =dynamic_cast<Derivado*>(b); // Conversión de tipo dinámico 

si (d != nullptr) { 

    // La conversión fue exitosa 

} demás { 

    // La conversión falló 

}

Cabe señalar que la conversión de tipo forzada puede traer ciertos riesgos, como falta de coincidencia de tipos, desbordamiento y comportamiento indefinido, por lo que debe asegurarse de que la conversión sea razonable al usarla.

Aquí hay un ejemplo completo de cómo convertir una variable de tipo double a una variable de 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;
}

Supongo que te gusta

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