07.18_111期_C++_异常

类型转换

具有一定关联的值才能进行类型转换

在C语言中,下面的情况可以进行类型转换

case1: 隐式类型转换,不需要特殊给定一个符号说明发生类型转换

整型 和 整型之间(有无符号)

浮点数 和 整型之间 (short、long、double、float 和 int)

case2: 强制类型转换,需要特殊给定一个符号说明发生类型转换

整型和指针

不同类型的指针之间

注意:

不是只要给定符号就能强制类型转换,比如 double 和 指针

在C++中,在C语言的基础之上,还有下面的情况可以进行类型转换

case1: 内置类型 转换成 自定义类型

比如一个类中 实现了一个 单参数的构造函数,

而且这个参数是内置类型,那么此内置类型 可以和 自定义类型转换

case2: 自定义类型 转换成 内置类型

case3: 自定义A类型 转换成 自定义B类型

在 B 类中设计一个构造函数,这个构造函数的参数是 A 类的变量即可

cpp 复制代码
class A
{
public:
	// 如果用explicit 修饰构造函数,表明这个类如果想要调用这个构造函数
	// 不能使用 形如 A te = 1; 的语句进行初始化
	// 只能使用 A te(1); 进行初始化
	// explicit A(int a1)
	A(int a1)
		:_a1(a1)
	{}

	A(int a1, int a2)
		:_a1(a1)
		,_a2(a2)
	{}

	operator int()
	{
		return _a1 + _a2;
	}
private:
	int _a1 = 1;
	int _a2 = 1;
};

int main()
{
	int i = 1;
	A te(1);

	int j = te;

	// while (cin.operator>>(x).operator bool())
	// cin 通过重载 >> 这个运算符返回一个对象,
	// 这个对象可以通过 operator bool() 转换成一个 bool 类型的变量
	while (cin >> i)
	{
		cout << i << endl;
	}

	string str;
	while (cin >> str)
	{
		cout << str << endl;
	}

	return 0;
}
cpp 复制代码
// 对于下面的程序,在进行 (end >= pos) 比较时
// end 会被转换成 size_t
void insert(size_t pos)
{
	int end = 10;
	while (end >= pos)
	{
		cout << end << endl;
		--end;
	}
}

int main()
{
	// C++ 中类型转换可以通过 static_cast 和 reinterpret_cast
	// 其中 static_cast 对应的是隐式类型转换
	// reinterpret_cast 对应的是强制类型转换
	int i = 1;
	double x = static_cast<double>(i);
	A aa1 = static_cast<A>(1);

	int j = 9;
	int* p = reinterpret_cast<int*>(j);

	// 但是 double x = reinterpret_cast<double>(p); 这句话还是非法的

	return 0;
}
cpp 复制代码
int main()
{
	// const 修饰的常量仍存放在栈区
	// volatile 这个关键字去掉了 一些编译器的优化
	// 有一些编译器会直接从寄存器中拿数据,
	// volatile 修饰以后,保证总是通过一个变量 对应的 内存地址取到这个 变量对应的值
	// volatile const int a = 1;
	const int a = 1;
	
	// 可以通过 int* ptr = (int*)&a; 这种代码
	// 强行将 a 的管理变成通过可以更改的变量 ptr,其实是很危险的
	//int* ptr = (int*)&a;
	// const_cast 强调了转换之后的变量可能
	// 从 不会改变值的 变量 变成了 会发生改变的 变量
	int* ptr = const_cast<int*>(&a);
	(*ptr)++;

	cout << *ptr << endl;
	cout << a << endl;

	return 0;
}
相关推荐
dragoooon344 分钟前
[优选算法专题八.分治-归并 ——NO.49 翻转对]
算法
AI科技星14 分钟前
为什么宇宙无限大?
开发语言·数据结构·经验分享·线性代数·算法
Appreciate(欣赏)31 分钟前
JAVA使用poi类读取xlxs文件内容拼接成添加数据SQL
java·开发语言·sql
Bona Sun1 小时前
单片机手搓掌上游戏机(十四)—pico运行fc模拟器之电路连接
c语言·c++·单片机·游戏机
Zero-Talent1 小时前
位运算算法
算法
oioihoii1 小时前
性能提升11.4%!C++ Vector的reserve()方法让我大吃一惊
开发语言·c++
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 基于JAVA的恒星酒店客房管理系统为例,包含答辩的问题和答案
java·开发语言
不穿格子的程序员1 小时前
从零开始刷算法——双指针-三数之和&接雨水
算法·双指针
思密吗喽1 小时前
景区行李寄存管理系统
java·开发语言·spring boot·毕业设计·课程设计
Rust语言中文社区1 小时前
【Rust日报】Dioxus 用起来有趣吗?
开发语言·后端·rust