您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页C++中的隐式类型转换

C++中的隐式类型转换

来源:叨叨游戏网

一、隐式类型转换概念

简单点说,就是类型T1自动转换为类型T2

简单的隐式类型转换如:10原本是int类型数据,赋值给double类型的变量x后,会自动由int类型转换为double类型

double x = 10;

x是int类型数据,当赋值给double类型数据y时,x类型自动转换为double类型。编译器先创建一个double类型的临时变量,再将该临时变量赋值给double类型数据y。 

int x = 10;
double y = x;

复杂的隐式类型转换如:对于单参数的构造函数,常规的初始化操作是A a1(1);隐式类型转换的操作是A a2 = 2。int型数据2转换为A类型数据,事实上是编译器先调用构造函数创建一个临时对象并初始化为2,再调用拷贝构造函数将该临时对象赋值拷贝给对象a2。

class A {
private:
	int _a;
public:
	A(int a)//构造函数
	{
		_a = a;
	}
};
int main()
{
	A a1(1);
	A a2 = 2;
	return 0;
}

注意:由于临时变量具有常性,所以当隐式类型转换遇到引用变量时,需要使用常变量(常对象)来接收。

编译器先创建临时对象const A tmp(3),再给该临时对象取别名为a3,类型为const A& a3

编译器先创建临时变量const double tmp=10.000000,再给该临时变量取别名为z

编译器先创建临时变量const double tmp=10.000000,再将该临时变量取别名为y

int x = 10;
const A& a3 = 3;
const double& z = 10;
const double& y = x;

二、C++11支持多参构造函数的隐式类型转换

C++11中,支持多参构造函数的隐式类型转换

class A {
private:
	int _a;
	int _b;
public:
	A(int a, int b)//构造函数
		:_a(a)
		, _b(b)
	{}
};
int main()
{
	A a1 = { 1,2 };
    const A& a2 = { 1,2 };
	return 0;
}

三、expilcit关键字

如果不想构造函数发生隐式类型转换,可以在构造函数前加上关键字explicit

class A {
private:
	int _a;
	int _b;
public:
	explicit A(int a, int b)//构造函数
		:_a(a)
		, _b(b)
	{}
};

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务