C++ 11 新特性

C++ 11  新特性

类内成员赋初值

类内数据成员允许赋默认值。

C11以前是会报错的。ISO C++ forbids initialization of member `name_var_'

lambda表达式

lambda表达式本质上是一个未命名的内联函数。
很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 lambda 表达式,简化编程。
lambda 格式:[capture list](parameter list)->return type {function body}
我们可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体。

 regex

regex

 random

C98中,通过rand()函数生成随机数。C 11使用 default_random_engine 类 和 相应的分布类。

 智能指针

cpp中,动态内存的管理是通过new、delete这一对操作实现的。delete操作的时机很难正确的把握,所以c11引入了智能指针,smart pointer,本质是模板类。

shared_ptr允许多个指针指向同一个对象。

unique_ptr独占所指的对象。

最安全的分配和使用动态内存的方法是调用make_shared库函数,它负责在堆中申请动态对象并返回智能指针。

每个智能指针都自动的维护着一个引用计数,若减为0,则自动调用对象的析构函数释放内存,不需程序员进行delete操作。当指向一个对象的最后一个shared_ptr销毁时,该对象也会被销毁。

shared/unique _ptr二者都支持的操作
shared_ptr<T> p或 unique_ptr<T> p 空智能指针,可以指向类型为T的对象
p 若p指向一个对象,p为true,可用于if(p)判断
*p 解引用p,获得它指向的对象,类似普通指针
p->member_object 等价于(*p).member_object
p.get() 返回p中保存的指针。要小心使用,若智能指针释放了对象,返回的指针所指的对象就也消失了
shared_ptr 独有的操作
make_shared<T>(args) 根据args参数创建T类型动态对象,然后返回shared_ptr 对象
shared_ptr<T> p(q) p是q的拷贝;此操作会递增q中的计数器。初始化要求类型兼容。
p=q p的引用计数减一,q的引用计数加一
p.use_count() 返回与p共享对象的智能指针数量
p.unique() 若p.use_count()为1,返回true,否则是false。

 范围for

更简单的for语句,用于遍历序列或容器的元素,并执行特定操作。

语法为  for(declaration:expression) statement  即for(变量:序列) 语句

 大括号赋值

c11允许使用大括号括起来的初始值列表给对象赋值。
 vector<int> v;v={1,1,2};

这在c11以前是错误的。

委托构造函数

只是新特性,不涉及关键字。委托构造函数使用所在类的其他构造函数,来完成初始化过程。优点就是少敲键盘。

class A{
	private:
	int a,b;
	public:
	A(int a,int b){this->a=a,this->b=b;}
	A(int x):A(x,2){}
	#ifdef c98
	//error: type `class A' is not a direct base of `A'
	#endif
};

string与数值类型 互转

数值类型转string
string to_string (int val);//long、float、unsigned int 等数据类型的重载也都有。
string转数值类型
int stoi (const string&  str, size_t* idx = 0, int base = 10);
unsigned long long stoull (const string&  str, size_t* idx = 0, int base = 10);
类似的,还有stod double、stof float、stoi int、stol long、。。。

 

时间: 2024-09-12 03:35:01

C++ 11 新特性的相关文章

《深入理解C++11:C++ 11新特性解析与应用》——第1章 新标准的诞生 1.1 曙光:C++11标准的诞生

第 1 章 新标准的诞生 从最初的代号C++0x到最终的名称C++11,C++的第二个真正意义上的标准姗姗来迟.可以想象,这个迟来的标准必定遭遇了许多的困难,而C++标准委员会应对这些困难的种种策略,则构成新的C++语言基因,我们可以从新的C++11标准中逐一体会.而客观上,这些基因也决定了C++11新特性的应用范畴.在本章中,我们会从设计思维和应用范畴两个维度对所有的C++11新特性进行分类,并依据这种分类对一些特性进行简单的介绍,从而一览C++11的全景. 1.1 曙光:C++11标准的诞生

《深入理解C++11:C++ 11新特性解析与应用》——1.2 今时今日的C++

1.2 今时今日的C++ 1.2.1 C++的江湖地位 如今C++依旧位列通用编程语言三甲,不过似乎没有以前那么流行了.事实上,编程语言排名通常非常难以衡量.比如,某位教授或学生用了C++来教授课程应该被计算在内吗?在新的联合攻击战斗机(Joint Strike Fighter,JSF-35)的航空电子设备中使用了C++编程应该计算在内吗?又或者C++被用于一款流行的智能手机操作系统的编程中算不算呢?再或者是C++被用于编写最流行的在线付费搜索引擎,或用于构建一款热门的第一人称射击游戏的引擎,或

C++11新特性之auto的使用_C 语言

前言 C++是一种强类型语言,声明变量时必须明确指出其类型.但是,在实践中,优势我们很难推断出某个表达式的值的类型,尤其是随着模板类型的出现,要想弄明白某些复杂表达式的返回类型就变得更加困难.为了解决这个问题,C++11中引入的auto主要有两种用途:自动类型推断和返回值占位.auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除.前后两个标准的auto,完全是两个概念. 一.自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型.通过aut

浅析C++11新特性的Lambda表达式_C 语言

lambda简介 熟悉Python的程序员应该对lambda不陌生.简单来说,lambda就是一个匿名的可调用代码块.在C++11新标准中,lambda具有如下格式: [capture list] (parameter list) -> return type { function body } 可以看到,他有四个组成部分:     1.capture list: 捕获列表     2.parameter list: 参数列表     3.return type: 返回类型     4.func

《深入理解C++11:C++ 11新特性解析与应用》——2.9 扩展的friend语法

2.9 扩展的friend语法 类别:部分人 friend关键字在C++中是一个比较特别的存在.因为我们常常会发现,一些面向对象程序语言,比如Java,就没有定义friend关键字.friend关键字用于声明类的友元,友元可以无视类中成员的属性.无论成员是public.protected或是private的,友元类或友元函数都可以访问,这就完全破坏了面向对象编程中封装性的概念.因此,使用friend关键字充满了争议性.在通常情况下,面向对象程序开发的专家会建议程序员使用Get/Set接口来访问类

《深入理解C++11:C++ 11新特性解析与应用》——1.4 C++特性一览

1.4 C++特性一览 接下来,我们会一窥C++11中的各种特性,了解它们的来历.用途.特色等.可能这部分对于还没有开始阅读正文的读者来说有些困难.如果有机会,我们建议读者在读完全书后再回到这里,这也是全书最好的总结. 1.4.1 稳定性与兼容性之间的抉择 通常在语言设计中,不破坏现有的用户代码和增加新的能力,这二者是需要同时兼顾的.就像之前的C一样,如今C++在各种代码中.开源库中,或用户的硬盘中都拥有上亿行代码,那么当C++标准委员会要改变一个关键字的意义,或者发明一个新的关键字时,原有代码

《深入理解C++11:C++ 11新特性解析与应用》——2.14 本章小结

2.14 本章小结 在本章中,我们可以看到C++11大大小小共17处改动.这17处改动,主要都是为保持C++的稳定性以及兼容性而增加的. 比如为了兼容C99,C++11引入了4个C99的预定的宏.__func__预定义标识符._Pragma操作符.变长参数定义,以及宽窄字符连接等概念.这些都是错过了C++98标准,却进入了C99的一些标准,为了最大程度地兼容C,C++将这些特性全都纳入C++11.而由于标准的更新,C++11也更新了__cplusplus宏的值,以表示新的标准的到来.而为了稳定性

《深入理解C++11:C++ 11新特性解析与应用》——第2章 保证稳定性和兼容性 2.1 保持与C99兼容

第 2 章 保证稳定性和兼容性 作为C语言的嫡亲,C++有一个众所周知的特性-对C语言的高度兼容.这样的兼容性不仅体现在程序员可以较为容易地将C代码"升级"为C++代码上,也体现在C代码可以被C++的编译器所编译上.新的C++11标准也并不例外.在C++11中,设计者总是保证在不破坏原有设计的情况下,增加新的特性,以充分保证语言的稳定性与兼容性.本章中的新特性基本上都遵循了该设计思想. 2.1 保持与C99兼容 类别:部分人 在C11之前最新的C标准是1999年制定的C99标准.而第一

《深入理解C++11:C++ 11新特性解析与应用》——第3章 通用为本,专用为末 3.1 继承构造函数

第 3 章 通用为本,专用为末 C++11的设计者总是希望从各种方案中抽象出更为通用的方法来构建新的特性.这意味着C++11中的新特性往往具有广泛的可用性,可以与其他已有的,或者新增的语言特性结合起来进行自由的组合,或者提升已有特性的通用性.这与在语言缺陷上"打补丁"的做法有着本质的不同,但也在一定程度上拖慢了C++11标准的制定.不过现在一切都已经尘埃落定了.在本章里读者可以看到这些经过反复斟酌制定的新特性,并体会其"普适"的特性.当然,要对一些形如右值引用.移动