C++11新特性

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字符串。

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值