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,一经查实,立即删除!

相关文章

H5112B 降压恒流芯片12V24V36V48V60V72V100V 1.2ALED 调光无频闪光滑细腻

H5112B多功能LED恒流驱动器是一款具有良好性能与高度集成度的驱动芯片。以下是该产品的主要优点及应用领域的详细分析&#xff1a; 产品优点&#xff1a; 宽电压输入范围&#xff1a;H5112B支持5V至90V的宽电压输入范围&#xff0c;使其能够适应多种不同的电源环境&#xff0…

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

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

本地生活元宇宙 橘子浑身都是宝,吃对营养加倍

橘子是秋冬季节的应季水果 含有丰富的营养价值 而且浑身都是宝 但你知道吗 吃橘子也是有讲究的 如何吃橘子才能营养最大化&#xff1f; 橘子有哪些食用禁忌&#xff1f; 一起来看看吧&#xff5e; 划重点 一颗橘子&#xff0c;3大营养 橘子具有开胃理气、止渴润肺、治胸膈结气、…

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…

代码安全问题0

该篇目主要是记录日常遇到的代码安全问题的记录 # 清空会话的RAM del combined_list gc.collect()# 重新读取上述合成的NPZ文件为一个新的文件 combined_arrays [] for i in range(1, batch_count 1): # 从1到batch_count1&#xff0c;包括剩余的最后一个文件data np.load(…

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…

从0开发一个Chrome插件:高级功能开发——存储数据

前言 这是《从0开发一个Chrome插件》系列的第十六篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必…

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

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

中介子方程十六

X$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XdXuXWXtXWXuXdX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XdXuXWXtXWXuXdX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XdX$XpX$XdX$XyXeXαX$XEXyXαXiX$XαXiXrX…

如何使用Python中的type()函数和isinstance()函数

在Python中&#xff0c;type()函数和isinstance()函数都用于确定一个对象的类型&#xff0c;但它们在用法和目的上有所不同。 1. type()函数 type()函数返回对象的数据类型&#xff08;或类&#xff09;。它接受一个参数&#xff08;即要检查的对象&#xff09;&#xff0c;并…

Web前端Block:深度探索与未来挑战

Web前端Block&#xff1a;深度探索与未来挑战 Web前端Block&#xff0c;作为现代网页开发的核心组件&#xff0c;承载着展现页面内容、实现交互逻辑的重要任务。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;对其展开深入探讨&#xff0c;并揭示其中蕴含的挑战…

【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的宽压输入范围。这意味着它可以轻松应对各种高压…