Veiasai / study-reference

MIT License
0 stars 0 forks source link

右值引用&&、移动赋值、移动构造、move、remove_reference #2

Open Veiasai opened 5 years ago

Veiasai commented 5 years ago
vector<int> f(){
     vector<int> a;
     return a;
}
vector<int> c = f();

像这种赋值语句会产生不必要的复制,因为f()的返回值是马上销毁的,完全可以是一种“移动”。 自从c++ 11后,stl容器的赋值、构造都增加了一种类型,(T && x) 称为右值引用,简单说就是这种没名字的变量,或者常量。 这种时候不会复制,而是移动。

而std::move()则是显式地将一个左值变成右值。(由程序猿判断某个变量不再需要被使用) 由此获得更大的灵活性。

remove_reference是去掉引用。 remove_reference<int &> a a的类型为int。

Veiasai commented 5 years ago

c++类型转换 static_cast dynamic_cast const_cast reinterpret_cast