当前位置: 首页 > article >正文

C++ explicit关键字的作用

C++ explicit关键字的作用

explicit的作用

这个关键字只能用于类的构造函数,被修饰的构造函数不能发生相应的隐式类型转换,只能以显式的方式进行类型转换。

另外,这个关键字只能用于单个参数(这里的单个参数包括多参但是具有默认参数的函数)的构造函数。

例子

现在有一个小孩:

class child {
public:
        explicit child(int age) : age(age) {}
        void say() {
            cout << "age: " << age << endl;
        }
private:
        int age;
};

在这种情况下,我们可以在创建对象时输入一个年龄:

#include <iostream>
using namespace std;

class child {
public:
        child(int age) : age(age) {
                cout << "child(int age)" << endl;
        }
        void say() {
        cout << "age: " << age << endl;
        }
private:
        int age;
};

int main() {
        child ch(10);    // 可以传入构造参数
        child ch2 = 12;  // 也可以赋值,这里调用的就是一个隐式的转换构造
        ch.say();
        ch2.say();
        return 0;
}

输出结果:

1

但是给孩子赋值一个年龄这件事在逻辑上有些说不过去,你如果想要避免别人使用这种行为,就需要 explicit 关键字:

#include <iostream>
using namespace std;

class child {
public:
	explicit child(int age) : age(age) {   // 加上explicit避免这种行为
		cout << "child(int age)" << endl;
	}
	void say() {
	cout << "age: " << age << endl;
	}
private:
	int age;
};

int main() {
	child ch(10);
	child ch2 = 12;    // 正常的有LSP的这里已经报错了
	ch.say();
	ch2.say();
	return 0;
}

再次编译就会报错:
11

补充

当然,不只是单个参数的可以,如果你的其他参数具有默认参数,也可以使用这个参数。


http://www.kler.cn/a/421768.html

相关文章:

  • AI - 如何构建一个大模型中的Tool
  • HTMLCSS 奇幻森林:小熊的甜蜜蛋糕派对大冒险
  • 「Python数据科学」数据科学的概念及Python常用数据科学库
  • 青海摇摇了3天,技术退步明显.......
  • 云服务器和物理服务器租用哪个好?
  • 在Neo4j中导入多个csv文件
  • 无人机主控芯片技术与算法详解!
  • 级联树结构TreeSelect和上级反查
  • spring boot mapper测试类优化
  • HTML 快速上手
  • 【网络安全】CSRF
  • `pnpm` 不是内部或外部命令,也不是可运行的程序或批处理文件(问题已解决,2024/12/3
  • 【Vue3】【Naive UI】<n-upload>标签
  • 【Delphi】modbus-TCP 协议库
  • 前端学习笔记-Vue篇-01
  • 前端用到的一些框架
  • python蓝桥杯刷题3
  • 游戏引擎学习第25天
  • 【XGlassTerminal.js】快速 构建 炫酷 终端 网页 以及 Linux 模拟器 在线!!
  • android视频播放器之DKVideoPlayer