C++ 数据类型转换
一、基础转换
自动类型转换
不同数据类型的差别在于取值范围和精度,数据的取值范围越大,精度越高。
整型从低到高:
char -> short -> int -> long -> long long
浮点型从低到高:
float -> double -> long double
自动类型转换的规则如下:
- 如果一个表达式中出现了不同类型操作数的混合运算,较低类型将自动向较高类型转换。
- 当表达式中含有浮点型操作数时,所有操作数都将转换为浮点型。
- 赋值运算的右值类型与左值类型不一致时,将右值类型提升/降低为左值类型。
- 赋值运算右值超出了左值类型的表示范围,把该右值截断后赋给左值,所得结果可能毫无意义。
- 当多个小于
int的整数进行运算时,会将他们的结果提升到int。
类的自动类型转换(从数据类型→类)
把构造函数自动当成了类型转换函数,顺手给你转了!
在C++中,将只有一个参数的构造函数用作自动类型转换函数,它是自动进行的,不需要显式的转换。
多个参数的构造函数,除第一个参数外,如果其它参数都有缺省值,也可以作为转换函数。
在构造函数前加 explicit 关键字用于关闭这种自动特性,
int main() {
// 场景1:常规构造
CGirl g1(8); // 直接调用构造函数
// 输出:调用了CGirl(int bh)
// 场景2:显式转换
CGirl g2 = CGirl(8); // 显式创建临时对象
// 输出:调用了CGirl(int bh)
// 场景3:隐式转换(自动转换)
CGirl g3 = 8; // 编译器自动调用 CGirl(8)
// 输出:调用了CGirl(int bh)
// 场景4:先默认构造,再赋值
CGirl g4; // 调用了CGirl()
g4 = 8; // 隐式转换:先创建临时对象 CGirl(8),再赋值给 g4
// 输出:调用了CGirl()
// 调用了CGirl(int bh) - 创建临时对象
// 调用赋值运算符(默认的)
return 0;
}
从类→数据类型
operator 数据类型() {return 数据类型;}
#include <iostream>
using namespace std;
class Girl {
public:
int m_value;
Girl() {
m_value=0;
}
explicit Girl(int value) {
m_value=value;
}
operator int() {
return m_value;
}
};
int main() {
Girl g1=Girl(9);
cout<<g1.m_value<<'\n';
int a=g1; // 从 类 -> int
cout<<a<<'\n';
return 0;
}

浙公网安备 33010602011771号