C++11新特性

1 C++11关键字

auto:类型自动推导关键字,声明的变量必须被初始化。不能使用auto情况:函数形参、结构体非静态成员变量、数组和实例化模板时模板参数

move:获得绑定到左值上的引用。将左值引用转换为右值引用

nullptr:是c++中空指针类型的关键字,不能被转换成数字

for(auto count : counts):遍历counts中的值,C++11中引入的auto主要有两种用途:自动类型推断和返回值占位

std::ref:主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用,如需要引用使用ref()

std:for_each(InputIterator first, InputIterator last, Function fn):用于逐个遍历容器元素,它对迭代器区间[first,last)所指的每一个元素,执行由单参数函数对象f所定义的操作

std::is_same:模板类型判断

std::decay:模板类型判断,先退化类型的修饰

emplace:避免产生不必要的临时变量,减少了拷贝构造函数调用。新引入的的三个成员emplace_front、emplace 和 emplace_back,这些操作构造而不是拷贝元素到容器中,这些操作分别对应push_front、insert 和push_back

set_terminate(void函数名):处理未设置异常处理函数的异常,多线程程序中,各个terminate函数是独立的,每个线程都有其terminate函数,如果不设置terminate函数,则默认情况下调用abort函数

std::function:有new操作,一次内存开销,需要明确的参数类型和返回类型,主要用于性能不高的场合

智能指针:shared_ptr:引用计数,原子操作,耗时,需要加锁;unique_ptr会转移ownership

std::to_string() :数值转换为字符串

std::ref:用于包装按引用传递的值。
std::cref:用于包装按const引用传递的值

std::stoi:字符串转化为整数

std::initializer_list:某种特定类型值的数组,不需要传引用以及const

右值引用:基于右值引用实现移动语义和完美转发,消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率

std::unordered_map:底层使用hash表,适用于查找

2 移动构造函数

移动构造函数接收的是“右值引用”的参数,代码构造和拷贝构造函数类似,但是内存的处理不是拷贝而是转移

A(A && h) { 
    if (h.str != nullptr) { 
        str = h.str;  // 指向之前内存
        h.a = nullptr; // 之前对象指向null
    }
}  

3 移动赋值运算符

和普通的赋值预算符相似,同样是内存移动而不是拷贝。注意参数类型是右值引用。左值引用不能接收右值引用参数

A& operator= (A &&h) {
    if (this != &h) {
        free();
        str = h.str;
        h.str = nullptr;
    }
    
    return *this;
}

4 bind函数

一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表

#include <functional>

class Test {
public void func1(int a, int b) {}
};

void func(int a, int b) {}

// fc的类型为function<void(int, int)>
auto fc = bind(func, 23, 45);
fc();

auto fc1 = bind(func, placeholders::_1, 45);
fc1(23);

// 配合function使用
function<void(int, int)> fc2 = bind(&Test::func1, placeholders::_1, placeholders::_2);
fc2(23,45);

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值