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;
}
posted @ 2026-02-19 19:05  FxorG  阅读(11)  评论(0)    收藏  举报