1.增加宏定义支持:增加C99预定义宏支持;__func__宏,代表当前所在函数的函数名;_Pragma,类似与#pragma,使用形式为_Pragma("xxxx");__VA_ARGS__,变长函数实参名称。
2.增加了long long数据类似,长度与具体平台相关,但不低于为64位。
3.宏__cplusplus值修改为201103L,原标准中为199711L。
4.支持静态断言static_assert()。
5.增加noexcept关键字,表明函数不会抛出异常,void func() noexcept。
6.支持类成员默认值设置,增加使用大括号初始化变量支持,
class Group{
int data = 1;
string name{"Group"};
}
7.可以对非静态类成员使用sizeof操作,语法:sizeof(Class::Property)。
8.声明友元类时,可省略class关键自,如friend class Poly与friend Poly等价。
9.final关键字,表明禁止子类重新实现该函数;override,表明该函数是覆盖父类的函数实现;void func() final/override。
10.模板类和模板函数支持模板类似默认值设置,模板类的默认参数需从最右侧开始指定,模板函数的默认参数位置无要求。
11.支持使用extern声明外部模板。
12.支持使用局部和匿名类作为模板实参。
13.使用using ParentClass::func;可以达到在子类中声明与父类中func函数相同的函数的效果,func可以是构造函数,如果是构造函数,效果为在子类中声明了一个相同格式的子类构造函数。
14.构造函数可调用其他版本的构造函数进行类初始化操作,形式如下
class Info{
public:
Info():Info(1,'a'){}
Info(int i,char e):type(i),name(e){}
},在构造函数中调用其他构造函数只能以初始化列表的形式调用,不能写在函数体中。
15.支持右值引用类型,以&&进行声明,用以实现移动构造函数,移动构造函数中需将原值置为空,防止重复析构。同时可以用在模板编程中实现完美转发。
16.联合体中可以包含POD类型的复杂对象。
17.支持用户自定义字面量操作符,语法形式为在 返回值 operator "" _操作符()。
18.父名字空间中可以直接调用使用inline namespace定义的名字空间内部的类似而不用指定名字空间。
19.using关键字可以用来定义别名,using sint = int 与 typedef int sint作用相同。
20.嵌套模版右边两个尖括号间可以不用再加空格,Y<X<int>> x。
21.可以使用auto声明变量或函数,编译器自动推定变量的类型和函数的返回值类型。
22.可以使用decltype操作变量的类型,int i decltype(i)=int,decltype会继承变量的const volatile等cv限制符,而auto不会。
23.支持类似于java的集合循环方式,
int arr[5] = {1,2,3,4,5};
for(int &e : arr)
e *= 2;
24.增强枚举类型的安全性,引用枚举类型必须加类型名,类似与类静态变量引用方式;同时可以指定枚举值的类型而不是只能用整形,同时不会向int类型进行隐式转换。
25.原auto_ptr使用unique_ptr,shared_ptr和weak_ptr替换;unique_ptr只能有一个变量持有实际的对象指针,shared_ptr使用引用计数管理对象指针,weak_ptr不持有实际的对象指针,不会影响只指针的引用计数值。
26.提供最小垃圾回收支持,可使用void declare_reachable(void*p)、void declare_reachable(void*p)和void declare_no_pointers(char*p,size_t n)、void undclare_no_pointers(char*p,size_t n)对垃圾回收动作进行控制。
27.可以通过在行数定义前加constexpr关键字的方式定义运行期常量表达式函数,该函数可对常量赋值。
28.可定义边长参数的模板参数和模板类。
29.标准库中增加了各基本数据类型对应的源自数据类型,如bool对应的原子类型为atomic_bool,使用原子类型生命的变量由编译器保证是线程安全的,无需在加线程同步代码;可通过atomic<int> a方式声明原子类型变量,通过调用read和store函数进行读写操作,同时调用函数时指定精细的变量同步要求,在线程安全的前提下提高性能。
30.增加线程内变量支持,使用thread_local关键字声明。
31.增加quick_exit(ret int)快速退出函数和at_quick_exit(func*)退出时清理动作注册函数,quick_exit指示程序立即退出,不执行析构函数,at_quick_exit用来注册调用quick_exit函数时应该先调用的清理函数,至少支持注册32个函数。
32.空指针NULL替换为空指针对象nullptr,nullptr类型为nullptr_t。
33.如果程序员显式声明了构造函数、析构函数、拷贝构造函数、引用构造函数中的任何一个,则编译器不会再生成以上所有函数的默认版本,这将导致类不再是POD的,出出c++11中可以通过ClassName() = default的方式要求编译器生成函数的默认版本,可使类恢复POD性质,以ClassName() = delete方式声明可删除类中相应函数。
34.支持lambda函数定义,与仿函数效果类似,实现方式相同。
35.增加alignof和alignas关键字,alignof用于检测数据对齐方式,alignas用于设置数据对齐方式。
36.增加了[[ noreturn ]]和[[ carries_dependency ]]两种通用属性,[[ noreturn ]]用于指示函数不会返回值;[[ carries_dependency ]]用于指示函数内已进行了数据同步性设置,调用函数时无需再设置内存栅栏,只用于弱内存模型平台上并行编程时的编译器优化。
37.至此乎unicode编码,增加了unicode相关的字符转换函数。
38.支持原生字符串字面量书写方式,R“xxx”表示本地字符编码字符串,u8R,uR,UR分别表示UTF-8、UTF-16、UTF-32字符串。
未完待续