认识 C++ 中的explicit 关键字

C++中的explicit关键字 explicit关键字只需用于类内的单参数构造函数前面。由于无参数的构造函数和多参数的构造函数总是显示调用,这种情况在构造函数前加explicit无意义。google的c++规范中提到explicit的优点是可以避免不合时宜的类型变换,缺点无。所以google约定所有单参数的构造函数都必须是显示的,只有极少数情况下拷贝构造函数可以不声明称explicit。例如作为其他类的透明包装器的类。effective c++中说:被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。 阅读详情

带单一参数的构造函数在缺省情况下隐含一个转换操作符,请看下面的代码:

  1. class MyClass{
  2. public:
  3.      MyClass(int nParam);// 带一个参数的构造函数
  4. private:
  5.      int m_nData;
  6. }
  7. void fun(){
  8.      MyClass c(0);
  9.      c =5; // 将5隐式转换为MyClass对象
  10. }

编译器重新编辑上述例子代码,如下: 
/////////////////////////////////////////////////////////////////////
//"c=5;" 被编译器转换成下面这个样子:
/////////////////////////////////////////////////////////////////////
MyClass temp(5);// 实例化一个临时对象,
c = temp; // 用 = 赋值
temp.MyClass::~MyClass(); // temp 的析构函数被激活
在很多情况下,这个转换是有意的,并且是正当的。但有时我们不希望进行这种自动的转换,例如:

  1. class String {
  2.    int size;
  3.    char *p;
  4. public:
  5.    String (int sz); //这里不希望进行隐式转换操作
  6. };
  7. void f ()
  8. {
  9.    String s(10);
  10.     // 下面是一个程序员的编码;发生一个意想不到的转换:
  11.     s = 100; // 糟糕,100 被转换为一个 String,然后被赋值给 s
  12. } 

为了避免这样的隐式转换,应该象下面这样显式声明该带单一参数的构造函数:

  1. class String {
  2.   int size;
  3.   char *p;
  4. //..
  5. public:
  6. // 不要隐式转换
  7.   explicit String (int sz); 
  8.   String (const char *s, int size n = 0); // 隐式转换
  9. };
  10. void f ()
  11. {
  12.     String s(10);
  13.     s = 100; // 现在编译时出错;需要显式转换:
  14.     s = String(100); // 好;显式转换
  15.     s = "st"; // 好;此时允许隐式转换
  16. }
C++中的关键字explicit 最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit ,用来修饰构造函数。以前在Windows下写程序的时候,基本上没有碰到这个关键字,那么这个关键字是做 阅读详情

相关推荐

理解C++中的explicit关键字

在编程语言中,类型转换是指将变量从一种数据类型转换为另一种数据类型的过程。类型转换可以是显式的,也可以是隐式的。显式类型转换由程序员通过特定的语法明确指定,而隐式类型转换则由编译器在编译时自动进行,无需程序员的明确指示。类型转换通常分为两类:安全的类型转换和不安全的类型转换。安全的类型转换,如将整数赋值给更大的整数类型,不会导致数据丢失。不安全的类型转换,例如将浮点数赋值给整数类型,可能会导致精度损失或意外的行为。在C++编程中,explicit。

weixin_42527589的博客 1007

【C++】explicit关键字详解(explicit关键字是什么? 为什么需要explicit关键字? 如何使用explicit 关键字)

在我们自己平时写 C++ 代码的时候,较少会用到 explicit关键字 。但是在C++相关的标准类库中,看到explicit关键字的频率还是很高的。既然出现的频率这么高,那么我们就来看看explicit关键字的作用到底是干什么的。

weixin_45031801的博客 8万+

SAP采购订单行项目增强实战:用BADI ME_GUI_PO_CUST添加自定义字段(避坑指南)

本文详细解析了如何通过BADI ME_GUI_PO_CUST在SAP采购订单行项目中添加自定义字段,包括技术架构理解、字段扩展步骤、自定义函数组创建及BADI实现。文章特别强调了避开官方文档未提及的陷阱,如字段映射限制和屏幕显示问题,并提供了高级优化技巧和性能建议。

weixin_30402343的博客 594

C++ explicit关键字详解

首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString // 没有使用explicit关键字的类声明...

天空的博客 22万+

[MTK][Android P]如何去掉差分包中的preloader分区

最近碰到一个问题,在进行差分升级的时候,会因为某些原因导致preloader hash值不匹配,升级失败,所以需要在差分升级的时候不升级preloader。 解决的方法,就是在制作AB分区的差分升级包的时候,把目标zip解压出来,把ab_partitions.txt中的分区名去掉,同时把preloader.img去掉 修改如下: Project/build/tools/releasetool...

thonmin的专栏 1434

Python画常见分布的概率密度图

因为做概随大作业,了解了一些python画概率分布图的方法。

qq_44807946的博客 5204

[cpp]C++的explicit关键字

C++编程语言中有很多比较重要的关键字在实际编程中起着非常重要的作用。我们今天为大家介绍的C++ explicit关键字就是其中一个应用比较频繁的关键字。下面就让我们一起来看看这方面的知识吧。 C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类的构造函数有一个参数,那么在编译的

cn_wk的专栏 564

【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知

Docker的监控,可以使用Docker自带的stats命令来获取当前主机上运行中的容器的资源使用情况。 例如:容器的CPU使用率、内存占用、网络IO以及磁盘IO等指标。

景天科技苑 6万+

c++易错点总结(1): cpp中的explicit的作用,为何尽量使用explicit关键字

在c++种explicit关键字只能用来修饰构造函数。禁止它自动调用拷贝初始化。 什么是拷贝初始化?举个例子: 现在我们不使用explicit关键字看看会发生什么?我们发现下面这个代码明明我们给函数f()传递的参数是一个整数,但是编译器却自动调用了类A的构造函数,这种就叫做拷贝初始化。这是超出预期的。如果你不希望这样那么请在构造函数前面加上explicit关键词禁止编译器这种自动调用拷贝初始化的行...

@司南牧|知乎|博客|易懂教程|李韬 1527

从 Material Requirements Planning 看 SAP 物料计划的底层控制逻辑

文章摘要:SAP中的MRP(物料需求计划)不仅仅是运行一个程序(如MD01N),其关键在于主数据和组织层级的正确配置。MRP的核心是解决"何时需要多少物料"的问题,涉及采购、生产、库存等多种供应来源。物料主数据的MRP视图必须在组织层级(如工厂、存储位置)下维护,不同层级的计划逻辑可能完全不同。S/4HANA更强调MRP Area作为细分计划单位,取代传统存储位置MRP。实施时需注意MRP Profile的合理使用,避免批量错误,并特别关注物料生命周期管理(如停用物料和替代件),这些因素共同决定了MRP能否

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1412

24、中性原子量子计算:原理、方法与实验

本文系统介绍了中性原子量子计算的原理、方法与实验进展。重点阐述了利用碱金属原子作为量子比特,通过磁光阱、光偶极阱和光晶格等技术实现原子捕获与控制的方法。同时,详细分析了单量子比特门操作和量子态工程的实现手段,并总结了相关实验结果与未来发展方向。该技术路线为构建大规模量子计算系统提供了可行方案。

ol789012的博客 244

c++ explicit关键字

c++explicit只能修饰只有一个参数的构造函数,或者所有参数都有默认值的情况下,将构造函数声明为显示的,避免隐式转换。 mapan@mapan-virtual-machine:~/c++/explicit$ cat main.cpp #include <iostream> using namespace std; class TEST { publi...

1万+

使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间

在泊松回归模型中,我们通常关注的是自变量对事件发生率的影响,而事件密度比(Incidence Rate Ratio,IRR)可以帮助我们理解不同自变量对事件发生率的相对影响。在本文中,我们将使用R语言来获取泊松回归模型所有系数的事件密度比的95%置信区间。通过以上步骤,我们可以使用R语言获取泊松回归模型所有系数的事件密度比的95%置信区间。为了获取事件密度比的置信区间,我们将使用。使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间。

BugCrusher的博客 1264

C++中的explicit关键字介绍

C++中的explicit关键字介绍

网络资源是无限的 2万+

unity从3D升级到urp管线,打包ab包后,材质全部变紫色

确保材质中的被转换为 URP 兼容的着色器。在打包 AssetBundle 时,确保所需的着色器被正确打包。确保运行 AB 包的目标项目中正确配置了 URP 渲染管线。如果加载后材质丢失,检查 AB 包的加载逻辑,确保材质正确应用了着色器。通过这些步骤,你应该能够解决从标准渲染管线切换到 URP 渲染管线后,材质在 AB 包中变紫色的问题。如果问题仍然存在,请根据具体错误日志进一步排查。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1962

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++中explicit关键字作用

 C++的explicit关键字c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:   MyClass( int nu

huangpeng8612的专栏 2824

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++中的explicit关键字使用

C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的即implicit。 注意:explicit关键字只能用于类内部的构造函数声明上,而不能用在类外部的函数定义(函数实现)上,它的作用是不能进行隐式转换;explicit关键字作用于单个参数的构造函数,如果构造函数有多个参数,但是从第二个参数开始,如果各参数均有默认赋值,也可以应用explicit关键字。 实例代码.cpp: #i.

在努力的松鼠的博客 329

详解 c++ 关键字 explicit

    用了很久的C++ 了,今天突然被小伙伴问道,构造函数前的explicit 关键字什么作用,于是自己也只能支支吾吾的说出“为了显示调用……”很尴尬啊……典型的知道所以然不知道其所以然……好吧,搜搜资料好好地充充电……    首先说定义,C++ 中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显式的,而非隐式的。跟他对应的另一个关键字是implicit...

漫步繁华街的专栏 1万+
上一篇: 同步(synchronous)与异步(asynchronous)
下一篇: 利用WM_DATACOPY消息实现进程间通信
ccfboy
博客等级 码龄18年 45粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值