【C++11】 列表初始化 auto 范围for 新增关键字 新增容器

news2024/12/22 17:29:38

文章目录

  • 1 列表初始化
  • 2 auto && 范围for
  • 3 新增关键字
    • 3.1 decltype
    • 3.2 default
    • 3.3 delete
    • 3.4 final与override
  • 4 总结


1 列表初始化

由c语言的规则我们知道:一般只有数组才会支持用{}初始化,但是C++11新语法规定我们不仅可以用{}初始化各种对象(内置类型和自定义类型),还可以不加上前面的=符号(一般不建议这样使用,可读性不好),比如下面的用法:

struct Point
{
 int _x;
 int _y;
};
int main()
{
 int x1 = 1;
 int x2{ 2 };
 int array1[]{ 1, 2, 3, 4, 5 };
 int array2[5]{ 0 };
 Point p{ 1, 2 };
 // C++11中列表初始化也可以适用于new表达式中
 int* pa = new int[4]{ 0 };
 return 0;
}

但是这样初始化的原理是什么呢?其实在C++11中又增加了一个新的类:initializer_list
【initializer_list的介绍文档】

initializer_list使用场景:
std::initializer_list一般是作为构造函数的参数,C++11对STL中的不少容器就增加std::initializer_list作为参数的构造函数,这样初始化容器对象就更方便了。也可以作为operator=的参数,这样就可以用大括号赋值像vector,list等容器我们可以直接用{}赋值。
在这里插入图片描述比如下面这种用法:

int main()
{
 vector<int> v = { 1,2,3,4 };
 list<int> lt = { 1,2 };
 
 // 这里{"sort", "排序"}会先初始化构造一个pair对象
 map<string, string> dict = { {"sort", "排序"}, {"insert", "插入"} };
 
// 使用大括号对容器赋值
v = {10, 20, 30};
 return 0;

2 auto && 范围for

这个语法我们早在讲解C++入门的时候就已经讲解了,感兴趣的老哥可以点击下面链接:【C++入门基础】


3 新增关键字

3.1 decltype

关键字decltype将变量的类型声明为表达式指定的类型。
一些使用的场景:

template<class T1, class T2>
void F(T1 t1, T2 t2)
{
decltype(t1 * t2) ret;
cout << typeid(ret).name() << endl;
}
int main()
{
const int x = 1;
double y = 2.2;
decltype(x * y) ret; // ret的类型是double
decltype(&x) p;      // p的类型是int*
cout << typeid(ret).name() << endl;
cout << typeid(p).name() << endl;
F(1, 'a');
return 0;
}

其实上面的这些场景用auto也可以很好的代替,但是下面的情况就不能够用auto代替了:
vector<decltype(x*y)>,由于vector中需要的是具体的类型,所以无法使用auto.

3.2 default

假设你要使用某个默认的函数,但是因为一些原因这个函数没有默认生成。比如:我们提供了自己写的默认构造,编译器就不会生成默认构造了。但是我们可以用default强制编译器生成。

class Person
{
public:
 Person(const char* name = "", int age = 0)
 :_name(name)
 , _age(age)
 {}
 Person(const Person& p)
 :_name(p._name)
 ,_age(p._age)
 {}
 Person() = default;
private:
 bit::string _name;
 int _age;
};

但是上面程序好像并没有实际价值,在学习了右值引用和移动语义后我们可以强制编译器生成默认的移动构造等等。

3.3 delete

如果想要限制某些默认函数的生成,在C++98中,我们应该怎么做?
将该函数设置成private,并且只声明补丁,这样只要其他人想要调用就会报错。
但是C++11提供了更加简易的方式:用delete关键字指定函数即可。

用法:

class Person
{
public:
 Person(const char* name = "", int age = 0)
 :_name(name)
 , _age(age)
 {}
 Person(const Person& p) = delete;
private:
 bit::string _name;
 int _age;
};
int main()
{
 Person s1;
 Person s2(s1);//报错

 return 0;
}

3.4 final与override

这两个关键字博主在继承与多态的文章详细介绍过,有兴趣的老哥可以移步:
【继承与多态】


4 总结

总的来说本次介绍的新语法还是挺简单的,都是一些基础的内容,C++11系列还有内容没有更新完,我们下次再见啦!! ❤️ ❤️❤️

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

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

相关文章

企业微信 创建应用后如何构造网页授权 获取token 获取用户信息

第一次对接企业微信&#xff0c;上网找了各种方案。 目的是在企业微信中&#xff0c;公司发给员工一个地址&#xff0c;员工点开后打开画面&#xff0c;在这个画面上可以获取到这个员工的userid&#xff08;后续功能操作就是各自不同的功能了哈&#xff0c;就不详细说了&#…

STM32F4_触摸屏

目录 1. 触摸屏原理 2. 电阻式触摸屏检测原理 3. 电容式触摸屏检测原理 4. 硬件配置 4.1 XPT2046驱动芯片 4.2 硬件设计 5. 代码详解 5.1 main.c 5.2 AT24C02.c 5.3 AT24C02.h 5.4 C_Touch_I2C.c 5.5 C_Touch_I2C.h 5.6 Touch.c 5.7 Touch.h 5.8 FT5206.c 5.9 …

ADAudit Plus:保护企业内部IT安全的强大解决方案

随着企业数字化的推进&#xff0c;IT系统和数据安全变得比以往任何时候都更加重要。为了保护企业的机密信息和敏感数据&#xff0c;企业需要一种可靠的IT安全解决方案。在众多选项中&#xff0c;ADAudit Plus是一款备受赞誉的软件&#xff0c;为企业内部的IT安全提供了强大的支…

Python入门自学进阶-Web框架——36、Web微信类实现初步

打开页面&#xff0c;会出现一个二维码&#xff0c;要使用手机微信扫一扫&#xff0c;才能登录。它的实现原理是什么&#xff1f; 下图为打开网页版微信登录的调试工具网络信息&#xff0c;定时发送请求&#xff0c;状态待处理&#xff08;pending&#xff09; 上图的挂起是pe…

网络安全|渗透测试入门案例分析,从零基础入门到精通—登录框页面的快速渗透常用检测手段

目录 引言 1、弱口令 2、万能密码绕过 ​编辑 3、登录认证绕过 3.1.令牌刷新端的错误配置 3.2. 错误的sso配置 3.3.CMS个例的访问问题 3.4.JWT Token的错误解析 3.5.暴力修改Authentication 4、图形验证码不失效 5、短信验证码不失效 6、短信攻击 7、反射型跨站脚…

【MySQL数据库】MySQL 高级SQL 语句二

MySQL 高级 SQL 语句二 一、连接查询1.1 inner join&#xff08;内连接&#xff09;1.2 left join &#xff08;左连接&#xff09;1.3 right join(右连接) 二、CREATE VIEW ---- 视图三、 UNION - - 连集3.1 UNION3.2 UNION ALL 四、交集值&#xff08;取两个SQL语句结果的交集…

经典:商业智能BI解读,值得收藏

关注新闻的朋友们可能注意到了&#xff0c;最近这段时间关于数据要素、数字经济、数字化转型的相关行动越来越多&#xff0c;一方面是各级政府的政策规划以及大规模的发展行动&#xff0c;另一方面是则是各行各业的企业开始探寻数字经济&#xff0c;通过数字化转型进行改革&…

angular学习笔记

目录 1、认识Angular![在这里插入图片描述](https://img-blog.csdnimg.cn/17fe3ec067b64d75bf9d24a4e71403ed.png)2、路由2.1、路由懒加载2.2、路由守卫 3、模版指令4、生命周期4.1、父子生命周期 5、依赖注入6、RXJS7、自定义事件&#xff0c;自定义指令8、自定义管道9、获取d…

内网渗透(八十八)之委派攻击

委派 委派是大型网络中经常部署的应用模式,给多跳认证带来了很大的便利与此同时也带来了很大的安全隐患。利用委派,攻击者可结合其他漏洞进行组合攻击,导致攻击者可获取本地管理员权限甚至域管理员权限,还可以制作深度隐藏的后门。 委派是指将域内用户的权限委派给服务账…

【Adversarial Attack in Object Detection】物理对抗攻击和防御

目录 安全监控 **有无意义**无意义的补丁有意义的补丁 光学对抗攻击对抗灯干扰相机成像 攻击方法White-box attacksGradient-based attacks Optimization-based attacks Black-box attacksQuery-based attacksEvolution algorithm OUTLOOK 在计算机视觉中&#xff0c;根据实现…

征服Go世界,御剑江湖!学习路线与顶级资源一网打尽

引言 Go语言&#xff08;也称为Golang&#xff09;是一种开源的编程语言&#xff0c;由Google开发。它具有简洁的语法、高效的并发性能和良好的内存管理&#xff0c;因此在近年来迅速获得了广泛的关注和采用。本文将为您提供一条学习Go语言的路线图&#xff0c;并介绍一些优质…

二分查找 - 数据结构和算法教程

二分查找被定义为在排序数组中使用的一种搜索算法&#xff0c;它通过重复将搜索间隔分成两半来实现。二分查找的思想是利用数组被排序的信息&#xff0c;将时间复杂度降低到O&#xff08;log N&#xff09;。 在数据结构中应用二分查找的条件 数据结构必须排序。访问数据结构的…

mac为什么读取不了NTFS格式硬盘,Tuxera NTFS for Mac 2022 读写ntfs移动硬盘插件

使用 Mac 的巨大痛点之一&#xff1a;移动硬盘只能打开文件&#xff0c;但是无法写入新的资料。有人说格式化硬盘&#xff0c;改成苹果的 macOS扩展格式&#xff0c;但是原先硬盘的数据要转移&#xff0c;而且拿到 Windows 系统里无法被识别。 有人说格式化硬盘&#xff0c;改…

关于nginx,正向代理和反向代理是什么意思

为什么要使用nginx 很多公司会用到nginx做代理服务器&#xff0c;为什么用nginx&#xff0c;tomcat服务器不行吗&#xff1f; tomcat缺点&#xff1a;并发量小&#xff0c;用户使用的少 nginx&#xff1a;高并发&#xff0c;高性能&#xff0c;cpu、内存等资源消耗却非常低&…

在 Navicat Premium 中管理 MySQL 用户 | 第 4 部分:权限管理员工具

第 4 部分&#xff1a;权限管理员工具 在本系列中&#xff0c;我们一直在探索如何使用 Navicat 的旗舰产品 Navicat Premium 执行常见的用户管理任务。在上一篇文章中&#xff0c;我们研究了新用户对象选项卡的“服务器权限”、“权限”和“SQL预览”选项卡。 在上一篇文章中…

前程无忧guid、acw_sc__v2

文章目录 声明目标网站acw_sc__v2分析python调用测试话外拓展-风控浅析往期逆向文章推荐 声明 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请私信我立即删除&#x…

【测试】Selenium操作Cookie

1.操作Cookie 操作Cookie无非就是读取和删除Cookie&#xff0c;下面这些是主要方法 from selenium.webdriver import Chrome, ChromeOptions from selenium.webdriver.chrome.service import Serviceoptions ChromeOptions() options.add_argument("--ignore-certifica…

07-source-map

source-map是从已转换的代码&#xff0c;映射到原始的源文件。使浏览器可以重构原始源并在调试器中显示重建的原始源。 根据源文件&#xff0c;生成source-map文件&#xff0c;webpack在打包时&#xff0c;可以通过配置生成source-map&#xff1b; 在转换后的代码&#xff0c;…

Springboot整合mybatisplus实战

Springboot整合mybatisplus&#xff0c;纯后端&#xff0c;验证结果是通过postman调用的&#xff0c;记录一下 1、建表语句以及初始化数据脚本 CREATE TABLE tbl_book (id int NOT NULL AUTO_INCREMENT,type varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT…

Django之模板层

一、模板简介 在刚刚介绍完的视图层中我们提到&#xff0c;浏览器发送的请求信息会转发给视图进行处理&#xff0c;而视图在经过一系列处理后必须要有返回信息给浏览器。如果我们要返回html标签、css等数据给浏览器进行渲染&#xff0c;我们可以在视图中这么做 from django.s…