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

news2024/10/7 13:19:33

默认成员函数有

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

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

这样的有时又不生成,容易造成混乱,于是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.coloradmin.cn/o/1826523.html

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

相关文章

MEMS:Lecture 16 Gyros

陀螺仪原理 A classic spinning gyroscope measures the rotation rate by utilizing the conservation of angular momentum. 经典旋转陀螺仪通过利用角动量守恒来测量旋转速率。 Coriolis Effect and Coriolis Force 科里奥利效应是一种出现在旋转参考系中的现象。它描述了…

多线程中run()和start()的区别

我们知道&#xff0c;在多线程中 Thread thread new Thread(runnable); thread.start();以及 thread.run();都可以执行runnable中run方法下的代码&#xff0c;但是二者又有所不同 下面给出一段代码用以体现二者的区别&#xff1a; 以下代码中&#xff0c;通过thread.start()启…

后端中缓存的作用以及基于Spring框架演示实现缓存

缓存的作用及演示 现在我们使用的程序都是通过去数据库里拿数据然后展示的 长期对数据库进行数据访问 这样数据库的压力会越来越大 数据库扛不住了 创建了一个新的区域 程序访问去缓存 缓存区数据库 缓存里放数据 有效降低数据访问的压力 我们首先进行一个演示 为了演示…

2024全新仿麻豆视频苹果cms源码v10影视模板

下载地址&#xff1a;2024全新仿麻豆视频苹果cms源码v10影视模板 高端大气的设计&#xff0c;适合做电影、连续剧、综艺、动漫、微电影、纪录片、海外剧等视频网站

Leetcode419. 甲板上的战舰

Every day a Leetcode 题目来源&#xff1a;419. 甲板上的战舰 解法1&#xff1a;一次遍历 战舰的个数&#xff0c;等于战舰「头部」的个数。 具体来说&#xff0c;如果位于 (i, j) 的格子是战舰的头部&#xff0c;那么左边和上边的相邻格子不能是 X。 代码&#xff1a; …

OrangePi AIpro 机器人仿真与人工智能应用测评

系列文章目录 前言 本篇文章分为2个部分&#xff0c;第一部分主要搭建了机器人的仿真环境&#xff08;ROS2 MuJoCo等&#xff09;&#xff0c;运行了机械臂及移动机器人相关示例程序&#xff1b;第二部分运行了OrangePi AIpro系统自带的示例程序及昇腾社区官方的示例程序&#…

MySQL 使用 MyFlash 快速恢复误删除、误修改数据

一、MyFlash MyFlash 是由美团点评公司技术工程部开发并维护的一个开源工具&#xff0c;主要用于MySQL数据库的DML操作的回滚。这个工具通过解析binlog日志&#xff0c;帮助用户高效、方便地进行数据恢复。MyFlash的优势在于它提供了更多的过滤选项&#xff0c;使得回滚操作变…

一文了解Spark引擎的优势及应用场景

Spark引擎诞生的背景 Spark的发展历程可以追溯到2009年&#xff0c;由加州大学伯克利分校的AMPLab研究团队发起。成为Apache软件基金会的孵化项目后&#xff0c;于2012年发布了第一个稳定版本。 以下是Spark的主要发展里程碑&#xff1a; 初始版本发布&#xff1a;2010年开发…

mysql报错Access denied for user ‘root‘,navicat可以连接mysql,spring不能连mysql

首先修改配置文件跳过验证&#xff0c;编辑你自己挂载的配置文件的位置 #查找my.cnf位置 sudo find / -name "my.cnf"编辑mysql配置文件 vim /opt/soft/mysql/conf/my.cnf #在[mysqld]下面添加 skip_grant_tables#重启mysql docker restart mysql#进入容器 docke…

完美的移动端 UI 风格让客户无可挑剔

完美的移动端 UI 风格让客户无可挑剔

快速数据处理:软件功能简介及下载

目录 1 功能介绍 1.1 封面 1.2 可定制功能 1.3 支持的操作系统和CPU 1.4 数据上报 1.5 数据接收 1.5 附带的测试数据 1.6 关于内置python的说明 2 软件下载 3 待开发功能 发布这个程序的原因是&#xff0c;前面写的这个专题的几篇文章&#xff0c;我原以为一点用也没…

代码随想录算法训练营第三十六天| 452. 用最少数量的箭引爆气球, 435. 无重叠区间 ,763.划分字母区间

452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int findMinArrowShots(int[][] points) {if (points.length < 1) {return points.length;}Arrays.sort(points, (o1, o2) -> {if (o1[0] ! o2[0]) {return o1[0] < o2[0…

局域网监控软件有哪些:五款好用的网络监控神器分享(收藏篇)

在日益复杂的企业网络环境中&#xff0c;有效地监控局域网内的活动对于确保网络安全、提高工作效率和维护企业资产至关重要。 为此&#xff0c;精选了五款市场上广受好评的局域网监控软件&#xff0c;它们各自具备独特的功能和优势&#xff0c;能够满足不同规模企业的需求&…

下载使用nginx发布html自定义页面

在浏览器搜索nginx.org&#xff0c;然后点击download&#xff0c;接着点击 stable and mainline 选择自己所使用系统对应的信息后点击&#xff08;我用的是CentOS&#xff0c;所以需要点击RHEL and derivatives&#xff09; vim /etc/yum.repos.d/nginx.repo [nginx-stable] n…

大模型应用:LangChain-Golang核心模块使用

1.简介 LangChain是一个开源的框架&#xff0c;它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成&#xff0c;实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛&#xff0c;使得任何人都可以…

Vue引入element-plus-04

我们这次开发是使用vue的脚手架来进行开发,前面我们已经使用过最原生的方式去编写我们的vue的语法,从今天开始就使用vue的脚手架,但是前提是你需要用于node的环境 在我们开始之前&#xff0c;我们至少需要有node npm是什么&#xff1f; npm是一个强大的包管理工具&#xff0c;它…

监控神器vnStat初探

文章目录 一、概述二、官方docker部署1. vnStat守护进程和HTTP服务器在同一容器中运行2. 双容器运行&#xff0c;vnstat容器收集数据&#xff0c;vnstati容器提供web服务 三、修改后的编排文件四、运行结果五、停止监控不感兴趣的网卡 一、概述 vnStat是一款网络流量监测工具&…

智慧监狱技术解决方案

1. **建设背景**&#xff1a;介绍了智慧监狱建设的战略部署&#xff0c;包括司法部提出的“数字法治、智慧司法”信息化体系建设&#xff0c;以及智慧监狱建设的总体目标、重点任务和实施步骤。 2. **建设需求**&#xff1a;分析了当前监狱系统存在的问题&#xff0c;如子系统…

Java新特性与性能调优

引言 Java不断演进&#xff0c;每个新版本都引入了新的特性和改进&#xff0c;帮助开发者在提高生产力的同时&#xff0c;也能更好地优化程序性能。本文将详细介绍Java新版本中的重要特性&#xff0c;如从Java 8到Java 17&#xff0c;并探讨性能调优的方法&#xff0c;包括JVM调…

沃尔玛自养号测评:优势与技术要求解析

沃尔玛自养号测评是一种卖家在沃尔玛平台上提升店铺权重和排名的营销手段。传统运营策略的局限性日益显现&#xff0c;如营销手段单一、难以应对市场竞争等。因此&#xff0c;许多卖家为了提升店铺权重和排名&#xff0c;选择了自养号测评这一技术手段。 以下是对沃尔玛自养号…