Skip to content

L2_05 数据类型转换

一、强制类型转换

1.1 语法

cpp
(目标类型) 表达式

1.2 示例

cpp
double pi = 3.14159;
int num = (int)pi;  // num = 3

float f = 5.9f;
int i = (int)f;     // i = 5

1.3 C++ 风格转换

cpp
double pi = 3.14159;
int num = static_cast<int>(pi);  // num = 3

二、隐式类型转换

2.1 概念

编译器自动进行的类型转换,无需显式声明。

2.2 转换规则

  • 低精度类型 → 高精度类型(安全)
  • 高精度类型 → 低精度类型(可能丢失精度)

2.3 示例

cpp
int a = 10;
double b = a;  // 自动转换:int → double

float c = 3.14f;
double d = c;  // 自动转换:float → double

2.4 运算中的转换

cpp
int x = 5;
double y = 2.0;
double result = x / y;  // x 自动转换为 double

三、类型转换注意事项

3.1 精度丢失

cpp
double num = 3.999;
int result = (int)num;  // result = 3(小数部分被截断)

3.2 溢出问题

cpp
int maxInt = 2147483647;
long long bigNum = maxInt + 1;  // 可能溢出

3.3 正确的转换方式

cpp
// 四舍五入
double num = 3.6;
int result = static_cast<int>(num + 0.5);  // result = 4

四、字符串与数字转换

4.1 字符串转整数

cpp
#include <string>
#include <sstream>

string str = "123";
int num;
istringstream(str) >> num;  // num = 123

4.2 整数转字符串

cpp
int num = 123;
string str = to_string(num);  // str = "123"

4.3 使用 C 风格函数

cpp
#include <cstdlib>

const char* str = "456";
int num = atoi(str);  // num = 456
double d = atof(str); // d = 456.0

五、示例程序

5.1 温度转换

cpp
#include <iostream>
using namespace std;

int main() {
    double celsius, fahrenheit;
    
    cout << "输入摄氏温度: ";
    cin >> celsius;
    
    fahrenheit = celsius * 9 / 5 + 32;
    cout << "华氏温度: " << fahrenheit << endl;
    
    return 0;
}

5.2 类型转换综合示例

cpp
#include <iostream>
using namespace std;

int main() {
    int a = 100;
    double b = 3.14;
    char c = 'A';
    
    // 隐式转换
    double sum = a + b;  // a 转换为 double
    cout << "sum = " << sum << endl;
    
    // 显式转换
    int charAscii = static_cast<int>(c);
    cout << "ASCII value of 'A' is " << charAscii << endl;
    
    return 0;
}

百炼成钢,融会贯通