explicit关键词的用途

article/2025/9/17 21:35:51

explicti 是显式转换关键词,用于不合适使用隐式转换( implicit)的地方,即如果我们不想用系统默认的隐式转换,就可以使用这个关键词。
虽然隐式转换可以使得代码更简洁直观,但是也有一些地方如果过于简洁就会影响代码可读性,比如下面这个例子:

#include <iostream>
using namespace std;
#include <string>
class MyString {
public:MyString (const char *str) {//cout << "传入了一个字符串 str!" << endl;}MyString (int a) {mSize= a ;cout << "传入了字符串的长度为a !" << endl;}char* mStr;int  mSize;
};
void test01 ( ) {MyString str1="abc";//1.看起来清楚,这是字符串abcMyString str2(10);  //2.看起来也清楚,这是传一个整型MyString str3=10;//3.看到这行代码想到什么?//是不是不太明确?//可能(1)str2是字符串类型,表示为字符串“10”//可能(2)str2是整型类型,表示字符串长度为10 //第3行代码其实是隐式转换,等价于 MyString str3 = MyString(10)//如果我们不想出现这种含义模糊的情况,可以用关键词**explicti** 来避免这种情况,避免隐式转换。
}int main() {test01();system("pause");return 0;}

如果想避免像第3种含义模糊的情况发生,则需要在强制使用显示转换的变量的函数前加explicit

explicit MyString (int a) {mSize= a ;cout << "传入了字符串的长度为a !" << endl;}

加入关键词explicit之后,如果不小心写成隐式转换的形式,软件就会有报错提醒。如下图:
在这里插入图片描述
小结
隐式转换是C++中一种自动转换的方式,可以将构造函数用作自动类型转换函数。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即被explicit关键字修饰的类构造函数,不能进行自动地隐式类型转换,只能显式地进行类型转换。
小结引用于:CSDN博主「老菜鸟的每一天」的原创文章,这篇文章讲解更详细,移步链接:https://blog.csdn.net/u011942101/article/details/123960257


http://chatgpt.dhexx.cn/article/g1XUcRuN.shtml

相关文章

C++: explicit的适用场合以及为什么要使用explicit

explicit是个C关键子,但是关注过它的人远远没有其他关键字的多,但是往往忽略了它,就会在一些不经意的地方造成错误,而花费更多的时间去寻找. 看下下面这个例子: #include <iostream> using namespace std;class A { public:A(int i 5){m_a i;} private:int m_a; };in…

explicit(显式)关键字

explicit 修饰构造函数时&#xff0c;可以防止隐式转换和复制初始化explicit 修饰转换函数时&#xff0c;可以防止隐式转换&#xff0c;但按语境转换除外 #include <iostream>using namespace std;struct A {A(int) { }operator bool() const { return true; } };struct…

explicit构造函数

转载于GGBeng大佬 链接在此 explicit构造函数 前面是扫盲部分&#xff0c;可直接看后面的精华部分。 扫盲 一、隐式的类类型转换 1. 转换构造函数 如果构造函数只接受一个实参&#xff0c;则它实际上定义了转换为此类类型的隐式转换机制 能通过一个实参调用的构造函数定…

详解 c++ 关键字 explicit

用了很久的C 了&#xff0c;今天突然被小伙伴问道&#xff0c;构造函数前的explicit 关键字什么作用&#xff0c;于是自己也只能支支吾吾的说出“为了显式调用……”很尴尬啊……典型的知道所以然不知道其所以然……好吧&#xff0c;搜搜资料好好地充充电…… 首先说定义&#…

explicit的用法

explicit的用法 explicit关键字的作用是&#xff1a;禁止隐式调用类的单参数构造函数&#xff0c;主要禁用以下两种操作&#xff1a; 禁止隐式调用拷贝构造函数 禁止类对象之间的隐式转换 类对象之间的隐式转换是指利用一个已经存在的其它类型的对象来创建本类的新对象&#…

C++中的explicit关键字介绍

C中的关键字explicit主要是用来修饰类的构造函数&#xff0c;被修饰的构造函数的类&#xff0c;不能发生相应的隐式类型转换&#xff0c;只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的即implicit。 隐式转换即是可以由单个实参来调用的构造函数定义了一个从…

C++中explicit的作用及用法

仅含一个参数的构造函数和除了第一个参数外其余参数都有默认值的多参构造函数承担了两个角色。 1. 是个构造函数&#xff1b;2 .是个默认且隐含的类型转换操作符。 explicit是个C关键字&#xff0c;其作用是指定仅有一个参数或除第一个参数外其它参数均有默认值的类构造函数…

C++ explicit

C提供了关键字explicit&#xff0c;声明为explicit的构造函数不能在隐式转换中使用。 1)C的类型转换分为两种&#xff0c;一种为隐式转换&#xff0c;另一种为显式转换。 2)C中应该尽量不要使用转换&#xff0c;尽量使用显式转换来代替隐式转换。 1隐式转换 定义&#xff1a…

C++ 中explicit的作用及用法(虽然简单,但是还是有用的)

目录 Cexplicit&#xff08;官网的说法&#xff09; explicit specifier Cexplicit 清楚的说法&#xff08;建议英文不好的从这里开始食用哦&#xff09; explicit作用: explicit使用注意事项: Cexplicit使用的例子&#xff08;建议喜欢自己敲代码实验的从这里开始食用哦&…

C++之explicit的作用介绍

1、C中的关键字explicit主要是用来修饰类的构造函数&#xff0c;被修饰的构造函数的类&#xff0c;不能发生相应的隐式类型转换&#xff0c;只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的即implicit。隐式转换即是可以由单个实参来调用的构造函数定义了一个…

explicit关键字详解

在C中&#xff0c;explicit关键字用来修饰类的构造函数&#xff0c;被explicit修饰的类的构造函数&#xff0c;不能发生相应的隐式类型转换&#xff0c;只能以显示的方式进行类型转换。 explicit使用注意事项: explicit 关键字只能用于类内部的构造函数声明上。 explicit 关…

74HC244;74HCT244——三态八路缓冲器/线路驱动器

1.特点&#xff1a; 2.引脚及封装&#xff1a; 3.引脚定义&#xff1a; 解释&#xff1a; output enable input (active LOW)输出使能&#xff0c;低电平有效 data input&#xff1a;数据输入 bus output:总线输出 4.使用逻辑&#xff1a; 解释&#xff1a; L&#xff1a;…

三态门(三态缓冲器)的工作原理

转载于http://www.eeworld.com.cn/mcu/article_2017102035218.html 为减少信息传输线的数目&#xff0c;大多数计算机中的信息传输线均采用总线形式&#xff0c;即凡要传输的同类信息都走同一组传输线&#xff0c;且信息是分时传送的。在计算机中一般有三组总线&#xff0c;即数…

2021-05-18

TTL集成门电路——三态门(与非门) 1、三态门的三种输出状态:高电平(逻辑1&#xff09;&#xff0c;低电平(逻辑0&#xff09;&#xff0c;高阻态(电阻大&#xff0c;可以视为开路) 2、三态门真值表及逻辑符号: !3、三态门的工作电路: 4、三态门的工作原理&#xff1a; EN为三…

锁存器、触发器、寄存器和缓冲器的区别

目录 一、锁存器 二、触发器 三、寄存器 四、移位寄存器 五、总线收发器/缓冲器 六、锁存器与触发器的区别 七、D触发器和D锁存器的区别 八、寄存器与锁存器的区别 一、锁存器 锁存器&#xff08;latch&#xff09;---对脉冲电平敏感&#xff0c;在时钟脉冲的电平作用…

三态门与高阻态

转自&#xff1a;https://blog.csdn.net/lin200753/article/list/4 高阻态这是一个数字电路里常见的术语&#xff0c;指的是电路的一种输出状态&#xff0c;既不是高电平也不是低电平&#xff0c;如果高阻态再输入下一级电路的话&#xff0c;对下级电路无任何影响&#xff0c;…

三态门与高阻状态

三态门&#xff0c;是指逻辑门的输出除有高、低电平两种状态外&#xff0c;还有第三种状态——高阻状态的门电路。高阻态相当于隔断状态&#xff08;电阻很大&#xff0c;相当于开路&#xff09;。 三态门都有一个EN控制使能端&#xff0c;来控制门电路的通断。 可以具备这三种…

【微机原理与接口技术】简单易学的 简单接口芯片—— 三态门 74LS244和 锁存器 74LS273

作者&#xff1a;MiTu_-_ 本帖内容著作权归作者所有&#xff0c;转载请务必保留本文链接 接口电路的基本构成 CPU通过接口与外部设备的连接示意图如下&#xff1a; 负责把信息从外部设备传入 CPU 的接口&#xff08;端口&#xff09;叫做输入接口&#xff08;端口&#xff09…

三态门——概念,作用,原理

介绍一下三态门的概念、作用、原理 目录 三态门的概念 三态门的作用 实现总线结构 实现双向数据传输 三态门的原理 三态门的概念 三态门是指逻辑门的输出有三种状态&#xff1a;高电平状态、低电平状态、高阻状态。 其中&#xff0c;高阻状态相当于隔离状态&#xff08;…