C++ 语法实验室之explicit关键字

本文详细介绍了C++中explicit关键字的作用及其应用场景。该关键字用于修饰单参数构造函数,以阻止其被隐式调用,从而避免潜在的类型转换错误。

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

好久没写过博客了,走一篇基础语法吧,算是凑个数吧


C++的explicit关键字的唯一作用就是放在一个类的构造函数前面修饰他,使此个构造函数无法通过赋值方式的隐式转换来调用。

以上这句话是我概括的,那么具体案例如下


// testcpplus.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>

class MyClass
{

public:

	explicit MyClass(int _age)
	{
		age = _age;
	}

	MyClass(const char  *_name)
	{
		strcpy(name, _name);
	}

	~MyClass()
	{


	}

public:
	int age;
	char name[200];
};


int main(int argc, char* argv[])
{
	MyClass myclassint1(5);//可以编译OK

	MyClass myclassint2 = 5;//无法隐式调用构造函数

	MyClass myclassfloat = "123456";//可以编译OK。隐式调用了构造函数

	myclassfloat = "789654";//可以编译OK。

	printf("测试完毕\r\n");
	system("pause");
	return 0;

}


可以很明确的发现一旦使用了explicit关键字的构造函数,则无法使用隐式方式=这种进行构造,当然如果你执着于要用等于号,还可以重载一下等于号这个运算符

总结:此关键字最大作用就是防止在有很多单参数构造函数等于号极度容易冲突情况,可以加上此关键字,保证正取的调用构造函数。

注意:实际我个人推荐要尽量可能避免一切隐式转换的发生,不管它能不能隐式转换。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值