C++explicit与implicit

explicit与implicit是C++关键字,其用处是修饰类构造函数。

explicit只能用于修饰只有一个参数的类构造函数,它的作用是表示此类构造函数是显式的而非隐式的,即explicit禁止类构造函数的隐式转换;与其相对应的implicit则代表着隐式的类构造函数,因为在默认的情况下,类构造函数都是隐式的,所以后者没有前者常用,也较少被提及。

但是在C++11的新标准下,对于两个参数以上的构造函数和转换函数也有效,在explicit之后无法使用【等于号+initializer_list】进行赋值。

下面附上一段引用自tiankong19999的代码,便于更好的理解这两个关键字:

class CxString  // 没有使用explicit关键字的类声明, 即默认为隐式声明
{
public:  char *_pstr;  int _size;  CxString(int size)  {  _size = size;                // string的预设大小  _pstr = malloc(size + 1);    // 分配string的内存  memset(_pstr, 0, size + 1);  }  CxString(const char *p)  {  int size = strlen(p);  _pstr = malloc(size + 1);    // 分配string的内存  strcpy(_pstr, p);            // 复制字符串  _size = strlen(_pstr);  }  // 析构函数这里不讨论, 省略...
};  // 下面是调用:  CxString string1(24);     // 这样是OK的, 为CxString预分配24字节的大小的内存  CxString string2 = 10;    // 这样是OK的, 为CxString预分配10字节的大小的内存  CxString string3;         // 这样是不行的, 因为没有默认构造函数, 错误为: “CxString”: 没有合适的默认构造函数可用  CxString string4("aaaa"); // 这样是OK的  CxString string5 = "bbb"; // 这样也是OK的, 调用的是CxString(const char *p)  CxString string6 = 'c';   // 这样也是OK的, 其实调用的是CxString(int size), 且size等于'c'的ascii码  string1 = 2;              // 这样也是OK的, 为CxString预分配2字节的大小的内存  string2 = 3;              // 这样也是OK的, 为CxString预分配3字节的大小的内存  string3 = string1;        // 这样也是OK的, 至少编译是没问题的, 但是如果析构函数里用free释放_pstr内存指针的时候可能会报错, 完整的代码必须重载运算符"=", 并在其中处理内存释放

C++explicit与implicit相关推荐

  1. .net转换关键字:operator、explicit与implicit

    operator.explicit与implicit 很少用到,但也不能不知道,发现这篇写很好,转一篇 operator operator 关键字用于在类或结构声明中声明运算符.运算符声明可以采用下列 ...

  2. operator、explicit与implicit

    说这个之前先说下什么叫隐式转换和显示转换 1.所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型. 例如:float f = 1.0: double d=f:这样 ...

  3. AAC Explicit or Implicit SBR PS issue

    最近在做AAC V1/V2 decoder时, 有客户要支持 Explicit or Implicit SBR & PS, such as VOT = 2, VOT = 5, 能很好的支持SB ...

  4. [翻译] TensorRT 中的 Explicit 与 Implicit Batch

    本文翻译自 Explicit Versus Implicit Batch 原文地址: https://docs.nvidia.com/deeplearning/tensorrt/developer-g ...

  5. C++学习(八十四)explicit和implicit

    在编程过程中, 我们习惯上使用explicit或者implicit关键字实现构造函数的显式或者隐式显示. explicit关键字:只能修饰只有一个参数的构造函数,或者有多个参数,但是除第一个参数外其他 ...

  6. 不忘本~explicit和implicit修饰符

    返回目录 部分内容来自MSDN implicit 关键字用于声明隐式的用户定义类型转换运算符.如果转换过程可以确保不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 1 cl ...

  7. C#中的Explicit和Implicit了解一下吧

    今天在研究公司项目框架的时候看到了下面的用法,public static implicit operator JsonData(int data);.貌似很久没用过这种隐式转换的写法了,因此重新温习一 ...

  8. C# Explicit 和 Implicit

    Implicit 关键字告诉编译器只有为了生成代码来调用方法,不需要在源代码中显示调用类型转换方法: Explicit 只有在显示转换时,才会调用方法: public sealed class Rat ...

  9. C++ explicit和implicit

    一.类类型转换 首先,明确什么是类类型转换, 内置类型存在定义了几种自动转换的规则,同样地,类也有定义隐式的转换规则. 若构造函数没有声明explicit且只接受一个实参,则它可以进行隐式的类类型转换 ...

最新文章

  1. AI时代,中国技术创新如何弯道超车?
  2. memcahce文章精选
  3. 数据结构实验五 查找算法的实现
  4. 解决: Linux – git: command not found
  5. Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout
  6. 9.20PMP每日一题
  7. 用python做数据分析教程_Python运用于数据分析的简单教程
  8. 数据结构算法—递归算法求二叉树的叶子结点(C语言)
  9. 华硕fl5600l笔记本拆机,在光驱位加装固态硬盘
  10. 【安卓Android】VibratorService分析
  11. 程序员创作的歌曲《三月五色风》正在欢唱中
  12. eclipse如何配置工作环境
  13. Mac 配置 docker 基本操作
  14. 用中文日淘:“日亚”的近85万件商品进驻亚马逊中国
  15. 说散就散乃是人生常态
  16. TM-30 计算软件 (Excel图表显示版本)
  17. 在dick字典里找最大值并返回key的办法
  18. 虚拟货币盘点:微币,Q币,苹果平台,Facebook 的F币,Google会推G币么?
  19. 数据类型_number_number数据类型概括
  20. 软件测试与质量保证课后作业

热门文章

  1. Unity渲染流程(渲染管线)(渲染流水线)
  2. 学术-数学:牟合方盖
  3. atd服务报错 Failed with result ‘exit-code‘
  4. 《区块链开发技术综述》乱弹
  5. 图像边界扩展及去除(普通方法)
  6. 面试题:Java类初始化顺序
  7. 三星手机不想使用html,用了三星S10不想换华为P30了?这三点原因让我无法反驳!...
  8. nmf java_java 中文与unicode互转
  9. cuda入门——记录
  10. linux安装SELinux管理工具,配置SELinux