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;  
}
相关推荐
椒颜皮皮虾྅15 分钟前
让文档不止于文字:DeploySharp + PP-Structure,打通版面分析与表格重建
开发语言·学习·c#·.net·cuda
Eider199825 分钟前
Python基础知识之并发相关-2
开发语言·前端·python
第九序言T28 分钟前
Python 数据处理进阶(二十二)用 Pandas 做一次完整的用户行为分析
开发语言·python·数据分析·pandas
云和数据.ChenGuang31 分钟前
再论深拷贝和浅拷贝
开发语言·人工智能·python·1024程序员节
悠仁さん37 分钟前
【C++】set map 使用
java·前端·c++
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】ChatServer问题修复
c++·学习·ai·大模型·sdk
扶尔魔ocy1 小时前
【QT C++】常用设计模式
c++·设计模式
晚风予卿云月2 小时前
【C++高并发内存池】 2.ThreadCache设计
开发语言·c++·高并发内存池·tcmalloc
Dovis(誓平步青云)2 小时前
拖动关键帧角色就抽动,动画编辑器怎样补齐中间状态
开发语言·前端·javascript·机器学习·编辑器
行走的陀螺仪2 小时前
Claude Code 从入门到实战(二):Bash工具、Plan模式与后台任务
开发语言·bash