C++ 11新特性之语法甜点2

概述

        C++ 11中引入了许多简化编程工作的语法上的新特性,我们暂且美其名曰:“语法甜点”。书接上篇,我们继续介绍C++ 11中的这些“语法甜点”,也是第二篇关于“语法甜点”的文章。

语法甜点6:模板右边双括号

        在C++ 03中,vector<vector<int>> vctTemp是一个非法的表达式,编译器会认为右边的>>是一个移位操作符,因此必须修改为:vector<vector<int> > vctTemp,即在右边的两个>中间添加一个空格。在C++ 11中,这将不再是一个问题,编译器将能够识别出右边的双括号是两个模板参数列表的结尾。

语法甜点7:static_assert

        静态断言static_assert由一个常量表达式和一个字符串构成。在编译期间,将计算常量表达式的值;如果为false,字符串将作为错误信息输出。

#include <iostream>
using namespace std;int main()
{char cNumber = 66;static_assert(sizeof(cNumber) == 4, "not an interger");return 0;
}

语法甜点8:初始化列表

        在引入C++ 11之前,只有数组能使用初始化列表。在C++ 11中,vector、list等各种容器以及string都可以使用初始化列表了。初始化列表对应的类为initializer_list,vector、list等各种容器以及string之所以可以使用初始化列表,是因为它们重载了参数类型为initializer_list的构造函数(称为初始化列表构造函数)和赋值函数(称为初始化列表赋值函数)。

#include <iostream>
#include <vector>
#include <map>
using namespace std;void Print(const initializer_list<int> &ilData)
{for (auto a : ilData){cout << a << endl;}
}int main()
{vector<int> vctNum = {1, 2, 3, 4, 5};map<string, string> mapID2Name = {{"92001", "Tom"}, {"92002", "Mike"}};string strText{"Hello CSDN"};Print({});Print({1, 2});Print({1, 2, 3, 4, 5});return 0;
}

语法甜点9:默认或禁用函数

        当我们定义了自己的带参数的构造函数时,编译器将不再生成默认的构造函数,如果此时想使用默认的构造函数,则必须显式地声明并定义不带参数的构造函数。在C++ 11中,我们可以使用default关键字来表明我们希望使用默认的构造函数。

        类似的,当我们不想外部使用编译器自动生成的构造函数或赋值函数时,我们一般需要将其声明成protected或private的。在C++ 11中,我们可以使用delete关键字来表明我们不希望编译器生成默认的构造函数或赋值函数。

class CPerson
{
public:CPerson() = default;CPerson(const CPerson &person) = delete;
};

        另外,=delete的声明(同时也是定义)也能适用于非自带函数,以禁止成员函数以特定的形参调用。

class CNoDouble
{void f(int i);void f(double) = delete;
};

        若尝试以double的形参调用f(),将会引发编译错误,编译器不会自动将double形参转换为int再调用f()。 若要彻底禁止以非int的形参调用f(),可以将=delete与模板相结合。

class COnlyInt
{void f(int i);template<class T> void f(T) = delete;
};

语法甜点10:继承的构造函数

        当一个派生类的某个函数隐藏了基类中的某个同名函数时,如果我们想在派生类中导出基类中的这个同名函数,可以通过using Base::Func的方式将基类中的这个同名函数引入到派生类的作用域内。但该方法只对普通成员函数有效,不能用于构造函数。

        在C++ 11中,如果派生类认为基类的构造函数已经足够,则也可以使用using Base::Base的方式将基类的构造函数引入到派生类的作用域内。注意:此时派生类中的成员变量并没有进行初始化,所以应当对这些成员变量进行就地初始化。

#include <iostream>
#include <string>
using namespace std;class CBase
{
public:CBase(int nValue) : m_nValue(nValue){cout << "Base constructor with int" << endl;}CBase(double dValue) : m_nValue((int)(dValue * 10)){cout << "Base constructor with double" << endl;}private:int m_nValue;
};class CDerived : public CBase
{
public:// 使用 using 关键字引入基类的所有构造函数到派生类中using CBase::CBase;// 如果需要添加额外的成员变量或自定义构造函数,可以继续定义CDerived(const string &strText) : CBase((int)strText.size()){cout << "Derived constructor with string" << endl;}
};int main()
{// 调用 CBase(int) 构造函数CDerived d1(5);// 调用 CBase(double) 构造函数CDerived d2(3.14);// 调用 CDerived(const string &) 构造函数CDerived d3("Hello CSDN");return 0;
}

        在上面的示例代码中,CDerived类通过using CBase::CBase语句,使得它可以直接使用CBase类中的所有公有和受保护的构造函数。这样,在创建CDerived对象时,可以根据传入的参数类型调用对应的基类构造函数来进行初始化。同时,CDerived类还可以拥有自己的构造函数,以处理新增成员变量的初始化和其他特殊逻辑。

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

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

相关文章

AOP使用案例

//加入bean Component //指定这是一个aop类 AspectSlf4j public class AOPlogin {Autowiredlogrizhi diaoyong;//获取传递过来jwt令牌AutowiredHttpServletRequest jwtlog ;//annotation(* com.example.tlias.AOPbao.loginin // Pointcut("annotation(* com.example.tl…

VUE!!!必看

ECMAScript 6-11 ECMAScript 相关介绍 什么是 ECMA ECMA&#xff08;European Computer Manufacturers Association&#xff09;中文名称为欧洲计算机制造商协会&#xff0c;这个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该组织改名为 Ecma 国际。 什么是 …

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 &#xff08;1&#xff09;树&#xff08;Tree&#xff09;是 n&#xff08;n ≥\geq 1&#xff09;个节点的有限集&#xff0c;n 0时称…

记elasticsearch CPU负载100%问题

记elasticsearch CPU负载100%问题 环境&#xff1a;问题表现&#xff1a;初步排查&#xff1a;日志查询hot_thread 深入查询当前elasticsearch正在运行的Task查看Task详情解决问题对导致问题的原因的几个猜测问题复现&#xff1a;导致问题的原因。json导入规则问题json导入规则…

Linux系统安全之iptables防火墙

目录 一、iptables防火墙的基本介绍 1、netfile与iptables的关系 1.1netfile 1.2iptables 1.3iptables是基于内核的防火墙&#xff0c;其中内置了raw&#xff0c;mangle&#xff0c;nat和filter四个规则表 2、iptables防火墙默认规则表&#xff0c;链结构 二、iptables的…

python实例100第50例:使用 random 模块输出一个随机数。

题目&#xff1a;输出一个随机数。 程序分析&#xff1a;使用 random 模块。 程序源代码&#xff1a; 实例 #!/usr/bin/python # -*- coding: UTF-8 -*-import random#生成 10 到 20 之间的随机数 print (random.uniform(10, 20)) 以上实例输出结果为&#xff1a; 14.4012…

HashSet 的基本操作【集合容器知识回顾 ④】

HashSet 是 Java 中的一个集合类&#xff0c;它实现了 Set 接口。Set 是一种不允许包含重复元素的集合&#xff0c;而 HashSet 则是 Set 接口的一个具体实现。因此&#xff0c;HashSet 用于存储一组唯一的元素&#xff0c;不允许重复。 HashSet 的一些特点&#xff1a; 不允许…

漏洞03-CSRF漏洞

CSRF漏洞 文章目录 CSRF CSRF

mybatis之@Table和@Column注解

背景 假如我们使用mybatis有时候会看到Table和Column注解注解&#xff0c;Table通常写着表的名字&#xff0c;Column注解写着对应数据库字段的值&#xff0c;在一开始我以为它们是用来做数据库表和实体类映射的&#xff0c;比如说通过mybatis从数据库查询&#xff0c;然后结果…

链式二叉树(1)

目录 二叉树的概念&结构 二叉树的遍历概念 手写二叉树测试 二叉树遍历实现代码 递归图解 前序遍历递归图解 中序序遍历递归图解 后续遍历递归图解 二叉树的概念&结构 二叉树是&#xff1a; 空树非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右子…

3ASC25H216A DATX132

3ASC25H216A DATX132 3ASC25H216A DATX132 3ASC25H216A DATX132在DAQ应用中使用非隔离DC/DC电源降压模块的优势 "... 图3&#xff1a;德州仪器电源模块电感HTS性能 此外&#xff0c;我们的电源 ... 响应。 图4&#xff1a;功率模块效率和负载瞬态响应 若保持 ...…

Java设计模式-组合模式(13)

大家好,我是馆长!今天开始我们讲的是结构型模式中的组合模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。 组合模式(Composite Pattern) 定义 组合(Composite)模式:又叫…

【开源】基于Qt5的ROS1/ROS2人机交互软件(支持地图编辑/多点导航)

本项目基于Qt5开发&#xff0c;基于CMake进行构建&#xff0c;可以实现一套代码同时在ROS1/ROS2系统中使用(本项目已接入CI,保证多ROS版本/系统版本可用性) 项目地址&#xff1a; https://github.com/chengyangkj/Ros_Qt5_Gui_App 软件在编译时会自动识别环境变量中的ROS1/ROS…

如何对视频进行翻译

下载视频和翻译软件 视频和翻译软件点击下载就行了&#xff0c;下载之后解压&#xff0c;然后把两个exe点一下。接下来如果资金充裕或者要求比较高的可以使用各个api&#xff0c;网站里有视频介绍了。 经济适用视频翻译 原理简析 首先这个软件对视频的翻译的流程大致如下&a…

2.4G SOC收发芯片XL2412P,适用于无线键鼠,遥控器等多种场景

XL2412P芯片是-款高性能低功耗的SOC集成无线收发芯片,集成MO核MCU,工作在2.400~2.483GHz世界通用ISM频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK 调制器、GFSK解调器等功能模块,并且支持一对多线网和带ACK的通信模式。发射输出功率、工作频道以及通信数据率均…

C语言的预编译:加速编译过程和优化代码性能的关键步骤

概念 预编译是编译器在实际编译源代码之前执行的一个关键步骤。通过预编译&#xff0c;编译器可以在编译过程中进行必要的处理和优化&#xff0c;以提高编译速度和代码的执行性能。预编译阶段主要包括宏替换、头文件包含、条件编译等操作。本文将介绍预编译的基本概念和常用的…

【GameFramework框架】一、框架介绍

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a; https://blog…

本地socket通信

bilibili 就业班视频搬运 p55 1.作用 本地进程通信使用。 2. 类型 2.1 面向连接的&#xff0c;类似于TCP &#xff08;但不是TCP 呀&#xff01;这里不需要什么协议了&#xff01;&#xff09; socket函数的第二个参数填写 SOCK_STREAM int sfd socket(AF_UNIX, SOCK_…

大模型相关术语

AGI&#xff08;Artificial General Intelligence&#xff09; 指通用人工智能&#xff0c;专注于研制像人一样思考、像人一样从事多种用途的机器。它与一般的特定领域智能&#xff08;如机器视觉、语音识别等&#xff09;相区分。 AIGC&#xff08;AI-Generated Content&…

tableau绘制雷达图

目标图形: 1. 数据准备 &#xff08;1&#xff09;原始数据 你要进行用雷达图比较的对象的各指标的数据。 (2) 处理后数据 在原数据的基础上添加对各指标进行区间的划分数据&#xff0c;也就是层级的划分。 2. 操作步骤 &#xff08;1&#xff09;数据转化 转化前&#xf…