C++11的一些新特性

1、支持模板...,可以传入多个不同类型,参数个数不定
2、尖括号改进,之前要区分‘> >’和‘>>’,现在可以直接用>>
3、加入nullptr,用于区分0,对于函数重载有用
4、auto,自动推断类型
5、lambda
6、对变量初始化可以直接用大括号{1,2,3},,背后涉及到initialzer_list,把大括号里数据拆分出来一一传入
7、explicit,针对构造函数一个以上实参,明确匹配某一类型,编译器不要自作聪明类型转换,如复数:1和1+0i不同
8、for循环,for(a:b){ } 从b中取出一个一个放到a中
9、=default,=delete:如果自己定义有构造函数ctor,那么编译器就不会给你一个默认构造函数default ctor
     如果加上=default,就使用默认构造函数default ctor
10、模板别名,使可以利用别名和传参数,而使用#define或typedef时,就得确定参数类型,就没有模板的特性 = 
     using Vec = std::vector<T,MyAlloc<T>>;
     Vec<int> coll;
    不过使用别名没有模板特化和偏特化,
11、noexcept不抛出异常
     void foo() noexcept;这个函数不抛出异常
     对于异常发生,如果没有被处理,会一直向上层查找这个异常属于哪里,异常最终没有被处理就会调用std::abort()
12、override,用于继承使虚函数的重写,派生类函数重写继承来的基类的虚函数,并声明override,
      当重写时函数接口写错会帮你报错说没有重写到
13、final,这个类、结构体不能用于继承
     struct Base final { }
     用于虚函数,这个虚函数不能被覆写
     virtual void f() final;
14、decltype,可以使不用知道容器使用的具体类型
    map<string,float> coll;
    decltype(coll)::value_type elem;

    上面使用了decltype,不然得这么写
    map<string,float>::value_type elem;
15、lambdas
[]{}形式:
auto p=[]{std::cout<<"hello"<<std::endl;};      
调用:p();

[](){}形式:
[]放外部变量,是传值还是引用
()里放的是定义在{}使用到的变量

int id=0'
auto f=[id]()mutable{ cout<<id<<endl; ++id;}//如果没有使用mutable,id不能++

对于[=,&y]使用=,表示可以使用外部所有的变量


16、右值  move 
左值通过move可以用于右值引用,相当于浅拷贝,指针指向原来的东西,原来的指针失效,不能对原来的左值在操作
右值引用可以提高效率
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值