C++ 11 explicit关键字

在C++中,我们有时可以将构造函数用作自动类型转换函数(构造函数)。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即被explicit关键字修饰的类构造函数,不能进行自动地隐式类型转换,只能显式地进行类型转换。跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。

demo1

#include <iostream>
#include <string>

using namespace std;

class student
{
public:
	student(int _age)
	{
		this->age = _age;
		cout << "arg=" << age << endl;
	}

	student(int _age, const string _name)
	{
		this->age = _age;
		this->name = _name;
		cout << "age=" << age << "; name=" << name << endl;
	}

	~student()
	{

	}

	int getAge()
	{
		return age;
	}

	string getName()
	{
		return name;
	}

private:
	int age;
	string name;

};


int main(void)
{
	student xiaoM(18); /* 显示构造 */
	student xiaoW = 18; /* 隐式构造 */

	student xiaoHua(19, "小花"); /* 显示构造 */
	student xiaoMei = { 18, "小美" }; /* 隐式构造 初始化参数列表, C++11 前编译不能通过, C++11 新增特性 */

	system("pause");
	return 0;
}

demo2

#include <iostream>
#include <string>

using namespace std;

class student
{
public:
	explicit student(int _age)
	{
		this->age = _age;
		cout << "arg=" << age << endl;
	}

	explicit student(int _age, const string _name)
	{
		this->age = _age;
		this->name = _name;
		cout << "age=" << age << "; name=" << name << endl;
	}

	~student()
	{

	}

	int getAge()
	{
		return age;
	}

	string getName()
	{
		return name;
	}

private:
	int age;
	string name;

};


int main(void)
{
	student xiaoM(18); /* 显示构造 */
	//student xiaoW = 18; /* 隐式构造 --error*/

	student xiaoHua(19, "小花"); /* 显示构造 */
	//student xiaoMei = { 18, "小美" }; /* 隐式构造 --error 初始化参数列表, C++11 前编译不能通过, C++11 新增特性 */

	system("pause");
	return 0;
}

这样的话隐式就会报错,显示就会没问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雪舞飞影

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

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

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

打赏作者

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

抵扣说明:

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

余额充值