【C++关键字——explicit显式】

怎么理解呢?

就好比:

int a=3.14;

cpp 复制代码
	base b(10);     //显式
	b = base(10);   //显式
	b = 12;         //隐式,加了explicit就报错

对于12,他会先去创建一个base类型的临时对象:base(12),运行构造函数,然后把临时对象拷贝给b;

临时对象 与 const 、&

const被设计为读对象的值,所以绑定到临时对象也不会出现通过&改变临时对象的值(因为很快就会被销毁)

cpp 复制代码
	base& b = 10;   //err  类似于:不能把右值绑定到左值

	const base& a = 10;    //ok

引入explicit:

也就不会产生临时变量了。

对于多参构造:

explicit同样适用,const&,&都和上面一样

需要注意设置默认值时,从左往右的缺省规则

{}:聚合初始化

cpp 复制代码
class base {
public:
	base(int a);
	base(int a, int b);

};

int main()
{
	base b = 10 ;    
	base b = { 1,2 };
	return 0;
};

相关推荐
张np1 天前
java基础-Deque 接口
java·开发语言
柒壹漆1 天前
用Python制作一个USB Hid设备数据收发测试工具
开发语言·git·python
有点。1 天前
C++ ⼀级 2023 年09 ⽉
c++
LXS_3571 天前
Day 16 C++提高之模板
开发语言·c++·笔记·学习方法
盒马盒马1 天前
Rust:内部可变性 & 型变
开发语言·后端·rust
沐知全栈开发1 天前
XSLT `<value-of>` 元素详解
开发语言
wyw00001 天前
鸿蒙开发-如何将C++侧接收的PixelMap转换成cv::mat格式
c++·华为·harmonyos
liulilittle1 天前
C++ CRTP 替代虚函数
数据结构·c++·算法
东哥很忙XH1 天前
python使用PyQt5开发桌面端串口通信
开发语言·驱动开发·python·qt
手揽回忆怎么睡1 天前
Java集成whisper.cpp
java·开发语言·whisper