浅谈C++ Explicit Constructors(显式构造函数)

发布时间 - 2026-01-10 22:11:32    点击率:

C++ 为类(Class)提供了许多默认函数。如果自己没有申明,编译器会为我们提供一个copy构造函数、一个copy assignment操作符和一个析构函数。此外,如果没有申明任何构造函数,编译器会为我们申明一个default构造函数。很像下面的Empty类:

class Empty{
  public:
    Empty();
    Empty(const Empty &rhs);
    ~Empty();
    Empty& operator=(const Empty &rhs);
};

就像Effective C++说的,如果不想使用编译器自动生成的函数,就应该明确拒绝。

1.C++中的隐式构造函数

如果c++类的其中一个构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。

2.Explicit Constructors显式构造函数

为了避免上面提到的只有一个参数的构造函数采用的缺省转换操作,在构造函数前,使用Explicit 关键字修饰即可。

3.如下面的例子:

#include <iostream>
using namespace std;
class B{
  public:
    int data;
    B(int _data):data(_data){}
    //explicit B(int _data):data(_data){}
};

int main(){
  B temp=5;
  cout<<temp.data<<endl;
  return 0;
}

程序第11行,将int转换为B类型的对象,就是使用了隐式构造函数。因为B中存在一个只有一个参数的构造函数,且参数类型也是int。

如果在构造函数前加explicit ,表示为显示构造函数,则第11行编译不能通过。因为这时,就没有隐式构造函数啦。

以上这篇浅谈C++ Explicit Constructors(显式构造函数)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# c  # explicit  # 构造函数  # c/c++拷贝构造函数和关键字explicit详解  # C++ explicit构造函数实例解析  # C++构造函数中explicit详解  # 给大家  # 只有一个  # 会为  # 转换为  # 隐式  # 有一个  # 就会  # 就像  # 希望能  # 如果没有  # 这篇  # 其中一个  # 提供一个  # 浅谈  # 很像  # 为了避免  # 将该  # 小编  # 自动生成  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  大连 网站制作,大连天途有线官网?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  海南网站制作公司有哪些,海口网是哪家的?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  高端云建站费用究竟需要多少预算?  浅谈Javascript中的Label语句  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何快速搭建高效WAP手机网站吸引移动用户?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何用PHP快速搭建CMS系统?  html如何与html链接_实现多个HTML页面互相链接【互相】  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel集合Collection怎么用_Laravel集合常用函数详解  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  iOS正则表达式验证手机号、邮箱、身份证号等  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何在七牛云存储上搭建网站并设置自定义域名?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  JavaScript如何实现继承_有哪些常用方法  微信公众帐号开发教程之图文消息全攻略  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  微信小程序 五星评分(包括半颗星评分)实例代码  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何登录建站主机?访问步骤全解析  如何获取PHP WAP自助建站系统源码?  如何在IIS服务器上快速部署高效网站?  JavaScript如何实现路由_前端路由原理是什么  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何快速搭建自助建站会员专属系统?