隐式转换和显示调用

隐式转换

先定义一个类,两个构造函数

class Entity {
private:
	std::string m_Name;
	int m_Age;
public:
	Entity(const std::string& name) 
		: m_Name(name) , m_Age(-1){};
	Entity(int age) /*explicit显示调用,则不能使用隐式转换,它的唯一作用就是希望显示
		调用构造函数*/
		: m_Name("Unknown"), m_Age(age) {};
};

一般的初始化方法:

	Entity a = Entity("che");
	Entity b = Entity(22);

也可以通过隐式抓换的方法:

Entity c = "xiaoming";
Entity d = 2;

这里我的 Entity c = "xiaoming"; 报错了(但是我看的教学视频里没用提示),说是没用从const char[] 数组转换到std::string的方法,这里应该给一个std::string类型的值,这个值会被用作于相应的构造函数,我们修改一下:

Entity c = std::string("xiaoming");

这样没用问题了。

我们再定义一个函数:

void PrintEntity(const Entity& entity) {
	// nothing to do
}

调用这个函数:

PrintEntity(22);
	// PrintEntity("xiaoming");/*报错是因为他不是一个std string,而是char*/
	PrintEntity("xiaoming");
	PrintEntity(Entity("xiaoming"));

会发现 PrintEntity("xiaoming"); 这个是报错了的,原因同样是因为没用从const char[] 数组转换到std::string,因此修改为 PrintEntity(std::string("xiaoming")); ,不再报错,这个函数同样使用了隐式转换。

explict关键词

class Entity {
private:
	std::string m_Name;
	int m_Age;
public:
	Entity(const std::string& name) 
		: m_Name(name) , m_Age(-1){};
	explicit Entity(int age) /*explicit显示调用,则不能使用隐式转换,它的唯一作用就是希望显示
		调用构造函数*/
		: m_Name("Unknown"), m_Age(age) {};
};

给构造函数前面加上这个关键词,将无法再使用隐式转换,唯一作用就是希望显示调用构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值