C++中的隐式类型转换

本文介绍了C++中隐式类型转换的概念,包括简单和复杂转换示例,以及C++11对多参数构造函数的支持。同时提到了如何使用explicit关键字防止构造函数的隐式类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、隐式类型转换概念

简单点说,就是类型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)
	{}
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周丕才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值