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中,动态内存的管理是通过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、。。。
 

你可能感兴趣的:(C++ 11 新特性)