c++中的类型转换及volatile(从语音层面看)

C++强制类型转换

标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:

static_cast、reinterpret_cast、const_cast、dynamic_cast

复制代码
#include<iostream>
using namespace std;


int main()
{
	int i = 1;
	double d = 6.66;
	//c---隐式转换
	i = d;
	cout << i << endl;//6
	//c---显式转换
	int* p = nullptr;
	p = (int*)i;
	cout << p << endl;//6
	//c++---c>隐式转换
	d = static_cast<double>(i);
	cout << d << endl;//6
	//c++---c>显式转换
	p = reinterpret_cast<int*>(i);
	cout << p << endl;//6
	//const_cast --- 去const属性
	const int ci = 10;
	int* pi = const_cast<int*>(&ci);
	*pi = 20;
	cout << *pi << endl;//20
	//编译器对const对象存取优化导致---内存中ci为20寄存器中ci为10
	cout << ci << endl;//10
	//防止优化,让编译器从内存中取值
	volatile const int ci = 10;
	int* pi = const_cast<int*>(&ci);
	*pi = 20;
	cout << *pi << endl;//20
	cout << ci << endl;//20

	return 0;
}

//注:dynamic_cast向下转换只能针对继承中的多态类型(父类必须包含虚函数)

复制代码
///
class A {
public:
	virtual void f()
	{} 

	int _a;
};
class B : public A
{
public:

	int _b;
};
void f_cast(A* pa)
{
	//如何判断pa是指向父类对象还是指向子类对象???
	//dynamic_cast ---若pa指向子类对象,则转换成功
	//             ---若pa指向父类对象,则转换失败,并返回nullptr
	//B* pb = (B*)pa;
	B* pb = dynamic_cast<B*>(pa);
	if (pb != nullptr)
	{
		cout << "转换成功: pa指向子类对象" << endl;
		pb->_a = 1;
		pb->_b = 2;
	}
	else
	{
		cout << "转换失败: pa指向父类对象" << endl;
	}
}

 //注:dynamic_cast向下转换只能针对继承中的多态类型(父类必须包含虚函数)
A a;
B b;
A* pa = &a;
//f_cast(pa);
pa = &b;
f_cast(pa);

向上转换:

c++中子类对象可以赋值给父类的对象,指针,引用,这个过程会发生切片,语法天然支持,不然可以转换成功。

向下转换:

如果是父类的指针或引用,传给子类的指针,这个过程不一定成功。

相关推荐
blxr_4 分钟前
MySql锁机制
java·开发语言
誰能久伴不乏5 分钟前
从底层看透音视频架构:FFmpeg 实时视频推流深度解析
linux·c++·tcp/ip·ffmpeg
此生决int6 分钟前
C++快速上手java备战期末考——初识java
java·c++·期末复习
落羽的落羽9 分钟前
【算法札记】练习 | Week3
linux·服务器·数据结构·c++·人工智能·算法·动态规划
计算机安禾12 分钟前
【c++面向对象编程】第13篇:继承(三):同名隐藏与作用域覆盖
开发语言·c++·iphone
ch.ju15 分钟前
Java Programming Chapter 3——Dynamic acquisition of array
java·开发语言
TechWayfarer19 分钟前
AI的幻觉谁来买单?智能体时代的数据溯源与鉴权
开发语言·python·安全·ai
Str_Null20 分钟前
Python 自动线性化 HTML/MD 表格的工程实践(一个读取表格并且提供输出的工具)
开发语言·python·html
Shadow(⊙o⊙)20 分钟前
qt内详解信号和槽的基本概念+实例演示
开发语言·前端·c++·qt·学习
艾iYYY23 分钟前
类和对象(详解初始化列表, static成员变量, 友元,内部类)
c语言·数据结构·c++·算法