C++-强制转换

static_cast

dynamic_cast

const_cast

reinterpert_cast

要看的

类型转换构造函数

典型案例就是 string a = “abc”;//这是隐式的调用了类型转换构造函数
实际上正规写应该是string a(“abc”);
类型转换构造函数有两种情况会调用
1.发生在初始化语句 如果所用参数类型和类内部数据类型不匹配时
例如

class A
{
	float a;
	A(int x):a(x)
	{
		cout<<"调用了类型转换构造函数"<<endl;
	}//这样我们写一个类型转换构造函数 就会被用上
}
int main()
{
	A a(1);//调用了类型转换构造函数 编译器先创建一个A对象a,然后将1传递给转换构造函数对a变量进行初始化
	A b = 1;//调用了类型转换构造函数
	return 0
}

2.发生在赋值语句 定义一个类类型的变量后,对其进行赋值,但是等号右边的类型与其不匹配时
注意: 会创建一个临时对象 将这个对象赋值给原对象

class A {
public:
	double x, y;
	A()
	{
		cout << "构造函数" << endl;
	}
	A(int i) {//类型转换构造函数
		cout << "类型转换构造函数" << endl;
		x = i; y = 0;
	}
	A(const A& c):x(c.x),y(c.y)
	{
		cout << "调用了拷贝构造函数" << endl;
	}
	A(double i, double j) { x = i; y = j; }
	~A()
	{
		cout << "析构了" << endl;
	}

};

int main()
{
	A a(7, 8);
	a = 9; // 9被自动转换成一个临时A对象,然后将该对象赋值给a。这里的转换属于隐式的转换。
	return 0;
}

请添加图片描述
调用类型转换构造函数的是临时A对象 并且在赋值给a之后 做了析构
并且在将临时A对象赋值给a时并不会调用拷贝构造函数

explicit

避免隐式转换 必须显式的调用构造函数

class A
{
	explicit  A(int x)
	{
		cout<<"调用了构造函数"<<endl;
	}
};
int main()
{
	A a = 1;//这样会报错 如果去掉explicit就可以这样调用
	A a(1);//这样才行
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值