C++ 11 新特性

简介: C++ 11  新特性 类内成员赋初值 类内数据成员允许赋默认值。 C11以前是会报错的。ISO C++ forbids initialization of member `name_var_' lambda表达式 lambda表达式本质上是一个未命名的内联函数。 很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名函数

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中,动态内存的管理是通过newdelete这一对操作实现的。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、。。。
 

目录
相关文章
|
29天前
|
设计模式 安全 算法
【C++ 基础】超越边界:C++中真正不受访问修饰符限制的特性
【C++ 基础】超越边界:C++中真正不受访问修饰符限制的特性
36 0
|
29天前
|
设计模式 存储 缓存
【C++ 基本概念】深入探索C++ RTTI 特性
【C++ 基本概念】深入探索C++ RTTI 特性
61 0
|
28天前
|
自然语言处理 编译器 C语言
【C++ 20 新特性】参数包初始化捕获的魅力 (“pack init-capture“ in C++20: A Deep Dive)
【C++ 20 新特性】参数包初始化捕获的魅力 (“pack init-capture“ in C++20: A Deep Dive)
38 0
|
29天前
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
45 0
|
29天前
|
Linux C++ iOS开发
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南(二)
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南
249 2
|
29天前
|
Linux API C++
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南(一)
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南
308 2
|
24天前
|
存储 安全 编译器
【C++】类的六大默认成员函数及其特性(万字详解)
【C++】类的六大默认成员函数及其特性(万字详解)
35 3
|
27天前
|
算法 安全 编译器
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
23 1
|
29天前
|
安全 算法 编译器
【C++ 模板编程 条件编译】深入探索 C++ 的条件编译:从 std::enable_if 到 C++20 的新特性
【C++ 模板编程 条件编译】深入探索 C++ 的条件编译:从 std::enable_if 到 C++20 的新特性
51 0
|
29天前
|
算法 安全 程序员
【C++14 新特性 透明操作符】透视C++14透明操作符Functors:深入理解与实践
【C++14 新特性 透明操作符】透视C++14透明操作符Functors:深入理解与实践
40 3

热门文章

最新文章