1.自动匹配类型(auto) 和 decltype(查询类型)
auto _a = 6;
std::cout<<typeid(decltype(_a)).name()<<std:send1;
步骤拆分:
1.auto根据初始化的数值6,自动推导类型为int
2.decltype根据 a 推导出类型为 int
结果:int
2.范围for
//范围for使用
std::vector<int> vector;
for (auto i:vectoz){
std::cout<<i<<std:sendl; //将vector中含有的每个int打印出来
}
3.移动语义(窃取,修改所以不加eonst)和右值引用
//*****************右值引用**********************
//***右值引用会延长临时对象的声明周期
//***右值包含:字面量,返回非引用类型的函数调用,临时对象(在赋值运算结束时被销毁)
constexpr int fun(){
return 6;
}
auto cc x= 100;
auto hc c = func();
//赋值运算返回引用是因为链式调用 a=b=c, 如果返回"值"则不成立
关于赋值运算重载返回的为什么是"引用"解析
A& operator=(const A&)()
返回"值"解析:
b=c就相当于(注:b对应this)
int x operator=(c){
this = c;
return *this;
}
a=b就相当于
int x operator(b=c){ //此时会出错,b=c返回临时值,但形参是左值引用,左值引用不能绑定到临时对象
this=b;
return *this;
}
//*****************移动语义**********************
移动语文主要用于移动构造函数,移动赋值运算符重载
A& operator=(const A&&){}
Myclass operator=(const Myclass& xx){
std::cout<<"----output----";
return *this;
}
MyClass (const Myclass&){}
MyClass(){}
MyClass& operator=(MyClass&& xx){
if (this != &xx) //为了避免自我赋值
{
}
std::cout<<"--";
return *this;
}
//移动构造
A(const A&&){}
4.std::move()用于将左值转右值
int a = 6;
int &af = a; //正确
int &&aff = a; //错误
int &&aff = std::move(a); //正确
注:a是左值,6是右值
标签:std,右值,int,auto,特性,C++,operator,引用 From: https://blog.csdn.net/qq_50682852/article/details/144518980