【c++11】c++1特性

news2024/12/23 18:26:14

c++11

  • c++11简介
    • 列表初始化
      • std::initializer_list
    • auto
    • decltype
    • nullptr
  • 结语

c++11简介

从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。

本期及后续文章会对c++11常用特性进行讲解。

列表初始化

在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。比如

struct Date{
  int _a;
  int _b;
};

Date d1={10,20};

int arr[]={1,2,3,4,5,6,7,8};

C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。
列如:



vector<int> v1={1,23,4,5,6,7,8,69};
vector<int> v2{10,20,30};

list<int> l1={10,20,30};
list<int> l2{1,2,3,4};

也要将其与类类型的初始化列表分清楚

class Date
{
public:
 //      初始化列表
	Date(int year=10, int month=20, int day=0)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
private:
	int _year;
	int _month;
	int _day;
};

std::initializer_list

由上可知,再对stl容器调用过程中,它的初始化列表可以是任意长度的:

vector<int> v1={1,23,4,5,6,7,8,9};
vector<int> v2={1,2,3};

那它是如何实现的呢,和c语言中的变长数组有什么区别嘛:

    int  arr[] = { 10,2,3,4 };
	auto a1 = { 10,20,30 };
	//查看变量类型
	cout << typeid(arr).name() << endl;
	cout << typeid(a1).name() << endl;

结果:
在这里插入图片描述
可以看的,a1的类型是std::initializer_list<int>

在这里插入图片描述
这是c++11中新增的构造函数,当你使用花括号对stl容器调用时,会匹配这个构造函数,c++11中的容器都新增了initializer_list构造。

还有initializer_list赋值
在这里插入图片描述

vector<int> v1;
v1={1,2,3,4,5,6,7};

auto

C++11中废弃auto原来的用法,将其用于实现自动类型推断。这样要求必须进行显示初始化,让编译器将定义对象的类型设置为初始化值的类型。
能更好的帮助我们简化代码,如:

std::map<string,string>::iterator it=m1.begin();

类型名如此之长,是不是很恐怖,当我们用上auto后,简化为:

auto it =m1.begin();

简便了很多,但是降低了代码的可读性,需要你对代码类型有一定的了解。

decltype

关键字decltype将变量的类型声明为表达式指定的类型。

int x = 1;
double y = 2.2;
decltype(x * y) ret; // ret的类型是double
decltype(&x) p; // p的类型是int*

上述用处auto 也可以代劳,但是
当需要传类型的时候是无法被替代的:

vector<decltype(x*y)> v;

此处auto无法使用。

nullptr

由于C++中NULL被定义成字面量0,这样就可能回带来一些问题,因为0既能指针常量,又能表示整形常量。所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针。

#define NULL 0

结语

我是Tom-猫,
如果觉得有帮助的话,记得
一键三连哦ヾ(≧▽≦*)o。

咱们下期再见。

在这里插入图片描述

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

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

相关文章

datax-web

【DataX-Web的搭建&#xff08;Windows/Linux环境&#xff09;_datax源码部署_zxj19880502的博客-CSDN博客 mirrors / WeiYe-Jing / datax-web GitCode https://github.com/WeiYe-Jing/datax-web/blob/master/userGuid.md 安装使用 这里只记录关键点 1、先安装datax、参考…

LED太阳能感应庭院灯开发方案

在庭院装修的时候&#xff0c;常会使用一些外部美观的照明灯&#xff0c;提供户外照明。为此&#xff0c;宇凡微推出了LED太阳能感应庭院灯方案&#xff0c;庭院灯控制芯片采用宇凡微YF单片机。 一、LED太阳能感应庭院灯方案的原理 太阳能感应庭院灯根据不同的设计需求&#xf…

dp算法篇Day4

"我把每一天都当做新开始&#xff0c;新革命。" 16、买卖股票的最佳时机含手续费 (1) 题目分析 完成一笔交易才算达成交易。但其实你可以将手续费加在任意一处上。 (2) 算法原理 class Solution { public:int maxProfit(vector<int>& prices, int fee)…

从敏捷到精益-漫谈敏捷实践

敏捷宣言与12条原则 让我们一起来回顾一下敏捷宣言和12条原则&#xff0c;不了解这些&#xff0c;怎么进行实践呢。 敏捷宣言&#xff1a; 个体与交互 胜过 过程与工具 可以工作的软件 胜过 面面俱到的文档 客户协作 胜过 合同谈判 响应变化 胜过 遵循计划 敏捷12条原则 1、…

Python学习49:词频统计

类型&#xff1a;文件‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬‪‬…

WPS表格:使用技巧

文章目录 1、时间1&#xff09;调整时间格式① 连接符② 将“常规、短日期、长日期”格式下的时间调整为自定格式③出现“数字”的情况④ 日期格式方便筛选、统计&#xff1b;转换格式&#xff1b;计算⑤出现#的几种情况⑥ 用“数据---分列”统一变成日期格式 2&#xff09;计算…

SpringBatch从入门到实战(三):作业参数

一&#xff1a;JobParameters传参 api获取 Spring Batch认为一个Job的唯一依据是 job_name hash(JobParameters) 作为联合主键盘 &#xff0c;所以每次执行都会传入一个唯一变动的参数&#xff0c;spring batch 就会认为这是不同的job&#xff0c;就可以重复执行同一个job。 …

Excel中数据转换成甘特图(wps)

数据准备 Excel数据如下表所示&#xff1b; 耗时这一列需要有&#xff0c;没有的话先添加耗时列&#xff1a;单元格E3-C31 自动计算耗时&#xff1b; 转换甘特图 1、调整数据 开始时间列&#xff0c;单元格格式 设置为 常规 2、插入堆积条形图 选中 关键人物 开始时间 和…

Axure必备入门知识

导语 Axure作为专业的原型工具&#xff0c;深受众多产品经理的喜爱&#xff0c;同样也是产品经理应聘的必备技能工具。本期小编将从软件安装及汉化、软件授权、软件使用、案例学习、使用问答、元件库、原型模板及实战原型、原型托管演示等方面介绍Axure必备入门知识&#xff0c…

基于vue搭建的网站如何防范XSS攻击

1.对于从接口请求的数据&#xff0c;尽量使用{{}}加载,而不是v-html ue中的大括号会把数据解释为普通文本。通常如果要解释成html代码则要用v-html。而此指令相当于innerHTML。虽然像innerHTML一样不会直接输出script标签&#xff0c;但也可以输出img&#xff0c;iframe等标签…

国产自主GPU架构“天狼星”在北京亮相

GPU&#xff08;Graphic Processing Unit&#xff09;即图形处理器&#xff0c;是数字世界图形内容生成的基石&#xff0c;不管是桌面应用、游戏、电影、数字孪生还是元宇宙&#xff1b;与此同时&#xff0c;强大的并行计算能力业已成为各种应用加速的主流手段&#xff0c;正广…

混淆矩阵和语义分割评价指标

语义分割评价指标 混淆矩阵和评价指标 https://cocodataset.org/#stuff-eval 混淆矩阵&#xff08;Confusion Matrix) 指标公式准确率、正确率 T P T N ТР T N F P F N \frac{TP TN}{ ТР TNFPFN} ТРTNFPFNTPTN​精确率、精度 P T P ТР F P P \frac{TP }{ ТР F…

VLAN基础知识1_整体介绍

目录 1.VLAN概述 2.VLAN帧格式 3.VLAN端口类型 4.缺省VLAN 5.VLAN打标签和去标签 6.VLAN划分的方法 1.VLAN概述 VLAN&#xff08;虚拟局域网&#xff09;是一种逻辑上划分网络设备的技术&#xff0c;用于将单个物理网络划分成多个虚拟网络。VLAN可以将网络中的设备分组&…

uni-app开发壁纸图像小程序 瀑布流、懒加载展示

标题&#xff1a;使用uni-app开发壁纸图像小程序&#xff1a;瀑布流与懒加载展示 引言&#xff1a; 在今天的移动应用市场中&#xff0c;壁纸图像小程序备受欢迎。为了提高用户体验&#xff0c;我们可以使用uni-app框架来开发这样的小程序&#xff0c;并实现瀑布流和懒加载展示…

Mybatis常见问题

Mybatis执行流程 理解各组件的联系Sql的执行过程&#xff08;参数映射&#xff0c;sql解析&#xff0c;执行和处理结果&#xff09;首先通过mybatis-config.xml文件去加载连接数据库的相关配置&#xff0c;加载sql的映射文件 通过mybatis的配置文件然后去构建会话工厂SqlSess…

chatgpt赋能python:Python整数筛选方法

Python整数筛选方法 Python是一种极其强大的编程语言&#xff0c;特别适合用于数据科学和数字计算。在数字计算中&#xff0c;经常需要筛选出指定范围内的整数。下面将介绍几种Python中筛选整数的方法。 1. 利用循环筛选 最简单的方法是使用循环&#xff0c;逐个检查每个数字…

关于Sui x KuCoin Labs夏季黑客松的七个关键信息

为促进Sui生态发展更进一步&#xff0c;Sui与KuCoin Labs联合举办夏季黑客松&#xff0c;希望能聚集全球加密英才&#xff0c;利用Sui产业领先的技术堆栈激荡出新的火花&#xff0c;为加密产业和Sui生态引入新的力量。本次黑客松总奖金达28.5万美元&#xff0c;分为多个赛道&am…

【React】React中编写CSS,Redux

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 React中编写CSS内联样式普通csscss modulescss in js动态添加class ReduxJS纯函数如何创建redux…

MVC 模式及对象持久化

MVC 模式及对象持久化 开发框架简介对象关系映射ORM 技术 Struts2 框架的使用Struts2 框架的下载及部署Struts2 配置 开发框架简介 在了解MVC 之前&#xff0c;首先来了解框架的概念。要理解框架的含义得从开发的实际需求说起。在软件开发过程中总有很多基础的功能是相同或者相…

荣耀MagicBook如何重装系统?荣耀MagicBook重装Win10系统教程

荣耀MagicBook如何重装系统&#xff1f;荣耀MagicBook是一款12小时长续航独显轻薄本&#xff0c;深受用户的喜欢&#xff0c;有些用户想知道如何给荣耀MagicBook重装Win10系统&#xff0c;操作难度不会很大&#xff0c;用户们可以根据小编给大家分享的荣耀MagicBook重装Win10系…