C++ explicit关键字的作用

explicit关键字只针带一个参数的构造函数有效

cpp 复制代码
#include <iostream>
using namespace std;

class A
{
public:
  A(int temp) //普通构造函数
  {
    a = temp;
    cout << "普通构造函数: a= " << a << endl;
  }
  
  A(const A &temp) //拷贝构造函数
  {
    a = temp.a;
    cout << "拷贝构造函数: a = " << a << endl;
  }
  
private:
  int a;
};

int main()
{
  cout << "显示调用:" << endl;
  A a(250); //显式调用调用普通构造函数,ok
  A b(a);   //显式调用调用拷贝构造函数,ok
  
  cout << "\n隐式转换:" << endl;
  A c=222; //隐式转换成调用普通构造函数,ok
  A d=c;   //隐式转换成调用拷贝构造函数,ok

  return 0;  
}

使用explicit关键字后

cpp 复制代码
#include <iostream>
using namespace std;

class A
{
public:
  explicit A(int temp) //普通构造函数,被声明为explicit(显式)
  {
    a = temp;
    cout << "普通构造函数: a= " << a << endl;
  }
  
  A(const A &temp) //拷贝构造函数,被声明为explicit(显式)
  {
    a = temp.a;
    cout << "拷贝构造函数: a = " << a << endl;
  }
  
private:
  int a;
};

int main()
{
  cout << "显示调用:" << endl;
  A a(250); //显式调用调用普通构造函数,ok
  A b(a);   //显式调用调用拷贝构造函数,ok
  
  //explicit构造函数只能被显式调用
  A c=222; //不能通过隐式转换,error
  A d=c;   //不能通过隐式转换,error

  return 0;  
}
相关推荐
吃好睡好便好13 小时前
Matlab中三种三维图的对比
开发语言·人工智能·学习·算法·matlab·信息可视化
代码改善世界13 小时前
【C++进阶】二叉搜索树
java·数据结构·c++
Highcharts.js13 小时前
无需搭建数据管道,如何快速上线投资基金筛选器?
开发语言·javascript·react.js·前端框架·highcharts
雨落在了我的手上13 小时前
初识java(六):方法的使用
java·开发语言
春蕾夏荷_72829772513 小时前
c++ 编译abseil-cpp
c++·abseil-cpp
如竟没有火炬13 小时前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划
三品吉他手会点灯14 小时前
C语言学习笔记 - 32.嵌入式C语言学习阶段对初学编程者的建议
c语言·开发语言·笔记·学习
l1t14 小时前
DeepSeek总结的一种带宽高效的压缩基数排序FractalSortCPU
开发语言·python
沐知全栈开发14 小时前
jEasyUI 树形网格动态加载详解
开发语言
Java源头14 小时前
PHP 身份证二要素检测
开发语言·php