C++explicit与implicit
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相关推荐
- .net转换关键字:operator、explicit与implicit
operator.explicit与implicit 很少用到,但也不能不知道,发现这篇写很好,转一篇 operator operator 关键字用于在类或结构声明中声明运算符.运算符声明可以采用下列 ...
- operator、explicit与implicit
说这个之前先说下什么叫隐式转换和显示转换 1.所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型. 例如:float f = 1.0: double d=f:这样 ...
- AAC Explicit or Implicit SBR PS issue
最近在做AAC V1/V2 decoder时, 有客户要支持 Explicit or Implicit SBR & PS, such as VOT = 2, VOT = 5, 能很好的支持SB ...
- [翻译] TensorRT 中的 Explicit 与 Implicit Batch
本文翻译自 Explicit Versus Implicit Batch 原文地址: https://docs.nvidia.com/deeplearning/tensorrt/developer-g ...
- C++学习(八十四)explicit和implicit
在编程过程中, 我们习惯上使用explicit或者implicit关键字实现构造函数的显式或者隐式显示. explicit关键字:只能修饰只有一个参数的构造函数,或者有多个参数,但是除第一个参数外其他 ...
- 不忘本~explicit和implicit修饰符
返回目录 部分内容来自MSDN implicit 关键字用于声明隐式的用户定义类型转换运算符.如果转换过程可以确保不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 1 cl ...
- C#中的Explicit和Implicit了解一下吧
今天在研究公司项目框架的时候看到了下面的用法,public static implicit operator JsonData(int data);.貌似很久没用过这种隐式转换的写法了,因此重新温习一 ...
- C# Explicit 和 Implicit
Implicit 关键字告诉编译器只有为了生成代码来调用方法,不需要在源代码中显示调用类型转换方法: Explicit 只有在显示转换时,才会调用方法: public sealed class Rat ...
- C++ explicit和implicit
一.类类型转换 首先,明确什么是类类型转换, 内置类型存在定义了几种自动转换的规则,同样地,类也有定义隐式的转换规则. 若构造函数没有声明explicit且只接受一个实参,则它可以进行隐式的类类型转换 ...
最新文章
- AI时代,中国技术创新如何弯道超车?
- memcahce文章精选
- 数据结构实验五 查找算法的实现
- 解决: Linux – git: command not found
- Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout
- 9.20PMP每日一题
- 用python做数据分析教程_Python运用于数据分析的简单教程
- 数据结构算法—递归算法求二叉树的叶子结点(C语言)
- 华硕fl5600l笔记本拆机,在光驱位加装固态硬盘
- 【安卓Android】VibratorService分析
- 程序员创作的歌曲《三月五色风》正在欢唱中
- eclipse如何配置工作环境
- Mac 配置 docker 基本操作
- 用中文日淘:“日亚”的近85万件商品进驻亚马逊中国
- 说散就散乃是人生常态
- TM-30 计算软件 (Excel图表显示版本)
- 在dick字典里找最大值并返回key的办法
- 虚拟货币盘点:微币,Q币,苹果平台,Facebook 的F币,Google会推G币么?
- 数据类型_number_number数据类型概括
- 软件测试与质量保证课后作业
热门文章
- Unity渲染流程(渲染管线)(渲染流水线)
- 学术-数学:牟合方盖
- atd服务报错 Failed with result ‘exit-code‘
- 《区块链开发技术综述》乱弹
- 图像边界扩展及去除(普通方法)
- 面试题:Java类初始化顺序
- 三星手机不想使用html,用了三星S10不想换华为P30了?这三点原因让我无法反驳!...
- nmf java_java 中文与unicode互转
- cuda入门——记录
- linux安装SELinux管理工具,配置SELinux