C++11默认成员函数控制

默认成员函数有

如果自己不显示声明,那么默认编译器会自己生成一个

如果有一个构造函数被声明了,那其他的默认函数编译器就不会再生成

这样的有时又不生成,容易造成混乱,于是C++11让程序员可以控制是否需要编译器生成。

显式缺省函数=default

默认函数的生成

当我们不写构造函数时,编译器对类会自动生成一个默认的构造函数

#include<iostream>using namespace std;class A
{void Print() { cout << _a << endl; }
private:int _a=1;
};int main()
{A a;return 0;
}

测试结果

由此得出默认生成的构造函数有用

当我们写了构造函数后编译器就不会生成默认成员函数

class B
{
public:B(int a):_a(a){}
private:int _a;
};

测试代码

void test2()
{B b1;B b2(2);
}

显示结果

此时编译器就会自动报错,应为我们明确写了有参的构造,他就不会在生成其他类型的默认构造函数

而此时如果我们需要其他类型的默认构造函数,出了我们写出对应的默认构造函数外,还能使用default

使用=default显示调用

=default类似标签,当自己写了构造函数时,默认构造函数就不生成,此时我们使用=default标记我们需要的默认构造函数,让其能自己生成对应的默认成员函数

=default直接修饰函数名+参数类型,不修饰函数体

class C
{
public:C(int a) :_a(a) {}C() = default;
private:int _a=1;
};void test3()
{C c1;//能调用默认无参构造C() = default;C c2(2);
}

此时,由于=default显示告诉编译器去让编译器生成一个无参构造,在测试中就能正常使用无参构造了

删除默认函数=delete

如果能想要限制某些默认函数的生成,在C++98中,是该函数设置成private,并且不给定义,这样只要其他人想要调用就会报错。

在C++11中更简单,只需在该函数声明加上=delete即可,该语法指示编译器不生成对应函数的默认版本,称=delete修饰的函数为删除函数。

无=delete

class A
{
public:A(int a) :_a(a) {}void Print() { cout << _a << endl; }
private:int _a;
};int main()
{cout << "有参构造函数" << endl;A a1(1);A a2(2);a1.Print();a2.Print();cout << "赋值重载" << endl;a1 = a2;a1.Print();a2.Print();cout << "拷贝构造" << endl;A a3(a2);a3.Print();return 0;
}

有=delete

有=delete,告诉编译器不要去生成对应的默认赋值重载和拷贝构造,delete也就相当于将默认赋值重载和拷贝构造删除

=delete直接修饰函数名+参数类型,不修饰函数体

删除函数(deleted function)是C++11中引入的一个特性,它允许你明确禁止某些函数的使用,比如通过在函数声明后加上= delete

class A
{
public:A(int a) :_a(a) {}void Print() { cout << _a << endl; }// 禁止编译器生成默认的拷贝构造函数以及赋值运算符重载A(const A&) = delete;A& operator=(const A&) = delete;
private:int _a;
};

此时相同的测试代码会报错,因为我们已经删除\禁止了对应的默认的拷贝构造函数以及赋值运算符重载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(虚拟机)VMware软件的安装及Ubuntu系统安装

一、VMware软件的安装 软件下载&#xff0c;可以自己找或者百度网盘下载&#xff1a; 通过百度网盘分享的文件&#xff1a;ubuntu16…等2个文件 链接:https://pan.baidu.com/s/1VEnZKY9DJ1T1vC3ae20gKQ 提取码:11b6 复制这段内容打开「百度网盘APP 即可获取」 1、解压VMwar…

06--jenkins构建CI_CD

前言&#xff1a;上一篇文章整理了git的部署和使用&#xff0c;这章主要复习持续集成软件Jenkins&#xff0c;这个技术现在在云计算方面也是有应用的&#xff0c;同时也是越高级越智能的软件代表。 1、概念简介 1&#xff09;jenkins是什么 Jenkins是一个开源的、可扩展的持…

Linux 终端窗口设置为透明

Linux 终端窗口设置为透明 打开终端 右键鼠标 选择Profile Preferences 点击Background 选择 Transparent background 拖动滑条调整透明度 完成。

Nintex流程平台引入生成式人工智能,实现自动化革新

工作流自动化提供商Nintex宣布在其Nintex流程平台上推出一系列新的人工智能驱动改进。这些增强显著减少了文档化、管理和自动化业务流程所需的时间。这些新特性为Nintex流程平台不断扩展的人工智能能力增添了新的亮点。 Nintex首席产品官Niranjan Vijayaragavan表示&#xff1a…

甄嬛传熹贵妃上户口:如果让他陪你过冬天,那朕能不能睡中间?贝叶斯模型推导爸爸去哪儿

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 背景 《甄嬛传》是大家耳熟能详的宫廷剧&#xff0c;其中复杂的宫斗情节和深刻的人物刻画让人津津乐道。甄嬛因为与皇帝(四郎)闹翻了&#xff0c;去甘露寺待了一段时间&#x…

Navicat和SQLynx产品功能比较一(整体比较)

Navicat和SQLynx都是数据库管理工具&#xff0c;在过去的二十年中&#xff0c;国内用户主要是使用Navicat偏多&#xff0c;一般是个人简单开发需要&#xff0c;数据量一般不大&#xff0c;开发相对简单。SQLynx是最近几年的数据库管理工具&#xff0c;Web开发&#xff0c;桌面版…

PyTorch C++扩展用于AMD GPU

PyTorch C Extension on AMD GPU — ROCm Blogs 本文演示了如何使用PyTorch C扩展&#xff0c;并通过示例讨论了它相对于常规PyTorch模块的优势。实验在AMD GPU和ROCm 5.7.0软件上进行。有关支持的GPU和操作系统的更多信息&#xff0c;请参阅系统要求&#xff08;Linux&#xf…

SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)

1.为什么要有这个需求&#xff1f; 一般当我们自己练习的时候&#xff0c;username和password直接是爆露出来的 假如别人路过你旁边时看到了你的数据库账号密码&#xff0c;他跑到他的电脑打开navicat直接就是一顿连接&#xff0c;直接疯狂删除你的数据库&#xff0c;那可就废…

字符数组基础知识及题目

死识。。。 字符该如何存储呢&#xff1f;这一点我们在以前就接触过了。用char来存储。 如何输入一个单词呢&#xff1f; char a[10002]; scanf("%s",a); 就不用地址符了。 如何输入句子呢&#xff1f; char a[100002]; gets(a); gets是读入句子的&#xff0c…

【第7章】Vue之第一个Vue程序(Vue创建)

文章目录 前言一、创建1. 命令行2. 创建3. 安装依赖 二、启动三、访问总结 前言 接下来我们通过VSCode来创建我们的第一个Vue应用程序。 一、创建 1. 命令行 Terminal>New Terminal 2. 创建 #这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工…

【Pr剪辑】工具栏的认识

目录 1.选择工具&#xff08;快捷键V&#xff09;1.1 选择1.2 移动素材1.3 框选1.4缩放1.5复制 2.钢笔工具&#xff08;快捷键P&#xff09;3.文字工具&#xff08;T&#xff09;4.剃刀&#xff08;C &#xff09;5.比例拉伸工具&#xff08;R&#xff09;6.波纹编辑工具&#…

HarmongOS打包[保姆级]

创建应用 首先进入 华为开发者联盟-HarmonyOS开发者官网 然后进行登录。 登录成功后&#xff0c;鼠标悬停在在登录右上角那个位置后再点击管理中心&#xff0c;进入下面这个界面。 再点击&#xff1a;应用服务–>应用发布–>新建–>完善信息 构建和生成私钥和证书请求…

惠海 H6213L降压恒压IC 支持3.3V5V12V30V40V60V100V电动车仪表供电稳压芯片方案

H6213L高压降压开关控制器是一款功性能良好的电源管理解决方案。它集成了众多先进的功能&#xff0c;使其在各种高压输入的应用场景中都能表现出色。 首先&#xff0c;H6213L具备高达150V的耐压能力&#xff0c;并支持高达120V的宽压输入范围。这意味着它可以轻松应对各种高压…

云原生系列之Docker常用命令

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 云原生之…

PyTorch计算机视觉入门:从官方数据集到自定义数据集的获取

一、PyTorch与计算机视觉简介 PyTorch是一个开源的深度学习框架&#xff0c;其动态图的特性非常适合快速实验和模型原型设计。在计算机视觉任务中&#xff0c;如图像分类、目标检测、图像分割等&#xff0c;PyTorch提供了丰富的API和预训练模型&#xff0c;帮助开发者快速搭建…

极致深耕,打造核心竞争壁垒——探寻蓝思科技穿越周期的密码

作者 | 曾响铃 文 | 响铃说 一家企业&#xff0c;如何才能在时代变幻的风云中不计较一时得失&#xff0c;长期稳健发展&#xff0c;穿越周期&#xff1f;本期主题就来探寻一家在湖南的国际化企业的发展密码。 穿越周期的企业&#xff0c;都在坚持一个驱动发展的“原点” 细…

scrapy爬取豆瓣书单存入MongoDB数据库

scrapy爬取豆瓣书单存入MongoDB数据库 一、安装scrapy库二、创建scrapy项目三、创建爬虫四、修改settings,设置UA,开启管道五、使用xpath解析数据六、完善items.py七、在douban.py中导入DoubanshudanItem类八、爬取所有页面数据九、管道中存入数据,保存至csv文件十、将数据写…

【Windchill监听器、队列、排程】

目录 Windchill监听器 监听器的概念 监听器的监听器实现原理 监听器的客制化 Windchill队列、排程 队列、排程的概念 Windchill常见出厂队列 自定义队列 Windchill 11新增功能 Windchill监听器 监听器的概念 监听器&#xff0c;字面上的理解就是监听观察某个事件&…

数据结构(DS)学习笔记(二):数据类型与抽象数据类型

参考教材&#xff1a;数据结构C语言版&#xff08;严蔚敏&#xff0c;吴伟民编著&#xff09; 工具&#xff1a;XMind、幕布、公式编译器 正在备考&#xff0c;结合自身空闲时间&#xff0c;不定时更新&#xff0c;会在里面加入一些真题帮助理解数据结构 目录 1.1数据…

FullCalendar日历组件集成实战(15)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…