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;  
}
相关推荐
汉克老师10 分钟前
CSP-J 2026 初赛试题解析(第三部分:完善程序题(第二题))精讲
c++·csp-j·小学生·学c++编程
kukubuzai17 分钟前
双指针系列二--末尾篇(3道题)
c++·算法·leetcode
君顾126 分钟前
西安24小时自助健身房系统软件开发实战:需求分析与技术落地指南
java·开发语言·健身房
传奇开心果编程26 分钟前
【Rust入门练中学】第4课:函数与所有权入门
开发语言·学习·rust
汉克老师39 分钟前
CSP-J 2026 初赛试题解析(第二部分:阅读程序题(第二题))精讲
c++·csp-j·小学生·学c++编程
神仙别闹1 小时前
基于 C++ 实现(控制台)关键字检索系统
c++
重生之小比特1 小时前
【初阶C++】stack和queue
开发语言·c++·vs·queue
qq_199886871 小时前
第8板块·第1节:主机与设备内存管理基础与统一内存
c++·人工智能·gpu算力·cuda
爱喝水的鱼丶1 小时前
SAP-ABAP:MM 模块供应商主数据开发:字段扩展、分级管控与同步接口开发
开发语言·性能优化·接口·sap·abap·增强·经验交流