C++11新标准(自己记录一下)

一、类型转换:

1、static_cast:
用来进行比较“自然”和低风险的转换,如整型和浮点型、字符型之间的互相转换。
2、reinterpret_cast:
用于进行各种不同类型的指针之间、不同类型之间的引用之间的以及指针和能容纳指针的整数类型之间的转换。转换时,执行的是逐个比特复制的操作。
3、const_cast;
仅用于去除 const 属性的转换,也是四个强制类型转换运算符中唯一能够去除 const 属性的运算符。
4、dynamic_cast:
reinterpret_cast 可以将多态基类(包含虚函数的基类)的指针强制转换为派生类的指针,但是这种转换不检查安全性,即不检查转换后的指针是否确实指向一个派生类的对象。dynamic_cast 专门用于将多态基类的指针或引用转换为派生类的指针或引用,而且能够检查转换的安全性。对于不安全的指针转换,转换结果返回 null 指针。

二、异常处理

以后再补:

三、智能指针

(转载自这里

1、shared_ptr:
shared_ptr允许多个该智能指针共享第“拥有”同一堆分配对象的内存,这通过引用计数(reference counting)实现,会记录有多少个shared_ptr共同指向一个对象,一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。
2、unique_ptr:
unique_ptr持有对对象的独有权,同一时刻只能有一个unique_ptr指向给定对象(通过禁止拷贝语义、只有移动语义来实现)。

unique_ptr指针本身的生命周期:从unique_ptr指针创建时开始,直到离开作用域。

离开作用域时,若其指向对象,则将其所指对象销毁(默认使用delete操作符,用户可指定其他操作)。
3、weak_ptr:
weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用计数的增加或减少。没有重载 * 和 -> 但可以使用lock获得一个可用的shared_ptr对象

weak_ptr的使用更为复杂一点,它可以指向shared_ptr指针指向的对象内存,却并不拥有该内存,而使用weak_ptr成员lock,则可返回其指向内存的一个share_ptr对象,且在所指对象内存已经无效时,返回指针空值nullptr。

注意:weak_ptr并不拥有资源的所有权,所以不能直接使用资源。
可以从一个weak_ptr构造一个shared_ptr以取得共享资源的所有权。

四、无序容器(哈希表)

C++11 新增4中无序容器,分别是 unordered_map、unordered_set、unordered_multimap、unordered_multi_set 。它们的实现都是hash表。哈希表是一种能够实现快速查找的数据结构,查找时间比关联容器更快,大多数情况下时间复杂度是O(1),属于用空间换时间。无序容器和关联容器的用法相似。

五、正则表达式

以后再补:

六、Lambada表达式

编写代码时,有时候一个函数只用一次,专门定义这样的函数写着就有点浪费。
Lambada表达式就能解决这个问题:
Lambada表达式的定义如下
[ 外部变量访问方式说明符 ] ( 参数表 ) -> 返回值类型 { 语句组 }
其中 “外部变量访问方式说明符 ”可以是 “ = ” 或者 “ & ”,表示 “{ }” 中用到的、定义在 “{ }”外面的变量在 “{ }” 中是否允许被改变。 “ = ” 表示不允许,“ & ” 表示允许。

七、auto和decltype

可以使用 auto 关键字定义变量,编译器会自动判断变量类型。例如:

auto a = 100; // a 是 int

decltype 可以用于求表达式的类型。例如:

decltype (a)   i; // i 的类型是 int 

八、基于范围的 for 循环

在访问整个数组或整个容器时,不再需要循环控制变量

vector<int> a(10);
for (auto i : a ) { // 可以使用这样的方式去遍历数组
	...
}

九、右值引用

能出现在赋值号左边的表达式称为 “ 左值 ”,不能出现在赋值号左边的表达式称为 “ 右值 ”。一般来说,左值是可以取地址的,右值不可以。非 const 变量都是左值。函数调用的返回值若不是引用,则该函数调用是右值。前面所说的“引用”都是引用变量的,而变量都是左值,因此他们是“左值引用”。
C++11 新特新增加了可引用右值,因而称为“右值引用”,无名的临时变量不能出现在赋值号左边,因而是右值。右值引用就可以引用右值。定义右值引用的格式如下:
类型 && 引用名 = 右值表达式;
引入右值引用的主要目的是提高程序的运行效率。有些对象在赋值时需要进行深复制,深复制往往非常耗时。合理的使用右值引用可以避免没有必要的深复制操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值