列表初始化
c++11以后支持{ }的列表初始
可以使用{ }括住数据来进行初始化,使用{ }初始化时可以省略=号
{ }中的数据要匹配构造;
使用{ }可以统一初始化方式。
cpp
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<pair<int,int>>vp;
vp.push_back({1,2});
cout<<vp.front().first<<" "<<vp.front().second;
}


右值引用和移动语义
左值和右值
特征 左值 (lvalue) 右值 (rvalue) 内存地址 有确定的内存地址,可被 &取址无稳定地址,不可被 &取址生命周期 持久存在,表达式结束后依然有效 短暂存在,通常在当前语句结束后销毁 赋值操作 通常可放在赋值号 =左边(const左值除外)只能放在赋值号 =右边典型示例 变量名、解引用指针 *p、数组元素arr[i]、++i字面量 10、算术表达式a+b、函数返回的临时对象、i++
右值引用就是给右值取别名;
左值引用不可以直接引用右值;
const 左值可以使用右值引用
const int & rx1=10;
右值引用不可以直接引用左值;
右值可以使用move函数给左值引用
int&& rrx1=move(b);
move标记的数据可以被抢夺数据。
string s2=move(s1),s1会变空,