Open Veiasai opened 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。
remove_reference<int &> a
c++类型转换 static_cast dynamic_cast const_cast reinterpret_cast
像这种赋值语句会产生不必要的复制,因为f()的返回值是马上销毁的,完全可以是一种“移动”。 自从c++ 11后,stl容器的赋值、构造都增加了一种类型,(T && x) 称为右值引用,简单说就是这种没名字的变量,或者常量。 这种时候不会复制,而是移动。
而std::move()则是显式地将一个左值变成右值。(由程序猿判断某个变量不再需要被使用) 由此获得更大的灵活性。
remove_reference是去掉引用。
remove_reference<int &> a
a的类型为int。