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;  
}
相关推荐
柳鲲鹏1 小时前
地图影像匹配:基于特征匹配的视觉定位2,python
开发语言·python
在路上看风景2 小时前
08. Static
c++
郝学胜-神的一滴2 小时前
深入理解网络IP协议与TTL机制:从原理到实践
linux·服务器·开发语言·网络·网络协议·tcp/ip·程序人生
程序猿_极客5 小时前
【2025 年最新版】Java JDK 安装与环境配置教程(附图文超详细,Windows+macOS 通用)
java·开发语言·windows·macos·jdk
一个不知名程序员www8 小时前
算法学习入门 --- 哈希表和unordered_map、unordered_set(C++)
c++·算法
二哈喇子!8 小时前
BOM模型
开发语言·前端·javascript·bom
C++ 老炮儿的技术栈8 小时前
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”声明?
c语言·c++·windows·git·vscode·visual studio
二哈喇子!8 小时前
空指针异常
开发语言
咚为8 小时前
Rust Print 终极指南:从底层原理到全场景实战
开发语言·后端·rust
%xiao Q8 小时前
GESP C++五级-202406
android·开发语言·c++