栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++中的类型转换总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++中的类型转换总结

此为本人学习日记,如有错误,请指出

1、内置类型转换成内置类型

整型之间的类型转换,char , int , long ,long long(包括无符号类型),这些转换从低字节类型转换高字节类型浮点数之间的类型转换,float,double,这些转换也是从低字节转换成高字节

转换方式:整型提升,直接提升

整型提升:字节数比int小的,在转换成字节数大于等于int类型时,都会进行的一种提升方式
例如char size_one=1;
unsigned int size_four=size_one; 这个转换过程中,char先转换成int,再从int转换成unsigned
直接提升:直接转换,例如int转换成unsigned,int 转换成int->unsigned long long等等
需要注意的是(与候选函数的匹配有关):有些初学者可能会注意到,int转换成unsigned,unsigned转换成long long,int转换成long long,那么int转换成long long是不是需要两步? 实际上只需要一步,并且int转换成long long和unsigned转换成long long都是等效的,并非unsigned转换成long long所转换的与int转换成long long都是一样容易的,对于函数来说他们都是转换一次。

2、内置类型转换到自定义类

这里需要满足两个条件,1、类必须是只含有内置类型的构造函数,或者该构造函数除了该内置类型定义的形参之外,其他的都有默认实参 2、该构造函数不能是关键字explicit定义的

class Student
{
public:
	Student(int n):age(n){}
private:
	int age;
};

class Student
{
public:
	Student(int n, int m = 0) :age(n), id(m)
	{
	}
private:
	int age;
	int id ;
};

上述两种都可以使用下面这个调用

Student student=3;

在效果上看出3变成了一个Student类型的对象student,就是从一个内置类型转换成了一个自定义类型
这里实际上是隐式调用了构造函数

3、自定义类型A转换成自定义类型B

方法1、同上,自定义类型B需要有一个以自定义类型A为形参的构造函数,或只有A类型的形参没有默认实参,其他形参都有默认实参的构造函数,并且该构造函数不能是被关键字explicit所定义的方法2、同下,可以利用

operator class 自定义类名 (){return 类对象;}
注意,这里的自定义类名,必须是前面已经定义或者声明的自定义类

4、自定义类型转换成内置类型

此方式的条件是,在自定义类型中设置转换,格式为

operator type() {return 变量;}
请注意,该变量必须是type类型的,也就是()前面的类型

定义代码

class Student
{
public:
	Student(int n, int m = 0) :age(n), id(m)
	{
	}
	operator int()
	{
		return age;
	}
private:
	int age;
	int id ;
};

调用代码,这里等号的右边是Student类(自定义类型),左边是内置类型,我通过定义了一个符号,将发生了转换,将Student转换成int类型

Student student(3);
int p=student;

可能有读者会疑惑,如果我需要long long,我还需要再在类内定义long long类型的转换吗?
我的建议是,看需求,如果你没有写long long类型的转换的话,会自动进行转换的
例如

//我并没有在Student类内定义long long类型的转换
long long q=student;

这里Student类帮我把student转换成了int类型,编译器帮我把int类型转换成了long long类型,因此有时如果没有高精度要求的话,可以不需要定义太多的类型转换(转换时容易造成二义性,或者函数匹配出现二义性),一般建议只在类内定义一个转换即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号