Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chuyển đổi kiểu dữ liệu trong C++ (Type Conversion)


Trong C++ có 2 loại chuyển đổi kiểu chính: ngầm định (implicit) và tường minh (explicit).

1. Chuyển đổi ngầm định (Implicit Type Conversion)

Còn gọi là chuyển đổi tự động. Trình biên dịch thực hiện khi biểu thức có nhiều kiểu dữ liệu. Các kiểu được nâng cấp theo thứ tự:

bool → char → short int → int → unsigned int → long → unsigned long → long long → float → double → long double

Ví dụ:

#include <iostream> 
using namespace std; 

int main() {
    int a = 10;
    char b = 'a';  // ASCII 97
    a = b + a;     // char → int, a = 107
    float c = a + 1.0;  // int → float, c = 108.0
    cout << "a: " << a << "\nb: " << b << "\nc: " << c;
}

Kết quả: a: 107, b: a, c: 108

Rủi ro: Mất dấu (sign), mất độ chính xác (precision), tràn số (overflow).

2. Chuyển đổi tường minh (Explicit Type Conversion / Type Casting)

Người lập trình chủ động ép kiểu. 2 cách trong C++:

  • C-style cast: (kiểu_mới)biểu_thức
  • C++ cast: static_cast<kiểu_mới>(biểu_thức), dynamic_cast, const_cast, reinterpret_cast

Ví dụ:

#include <iostream> 
using namespace std; 

int main() {
    double x = 1.574;
    int add = (int)x + 1;  // C-style: 1 + 1 = 2
    cout << "Add: " << add;
    
    float y = 3.5;
    int val = static_cast<int>(y);  // C++ style: 3
    cout << "\nValue: " << val;
}

Kết quả: Add: 2, Value: 3

Các loại C++ Cast

CastMục đích
static_castChuyển đổi kiểu liên quan (numeric, con trỏ related), compile-time
dynamic_castÉp kiểu đa hình (polymorphic), runtime check, cần RTTI
const_castThêm/bỏ const/volatile
reinterpret_castÉp kiểu cấp thấp, reinterpret bit pattern (dangerous)