右值引用、复制和移动
Rvalue references, copy and move
考虑以下代码部分进行交换:
//for some type T
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
和下面这个:
//for some type T
void swap(T& a, T& b) {
T temp = static_cast<T&&>(a);
a = static_cast<T&&>(b);
b = static_cast<T&&>(temp);
}
我有以下疑问:
它们之间有什么区别?我的意思是为什么第一次交换比第二次交换更贵?
参考:C++编程语言7.7.2
What is the difference between them? I mean why the first swap is more expensive than the second one ?
第二个为支持它的类型启用移动(即具有移动赋值运算符)。这些类型包括标准向量、字符串等。
对于不支持move语义的基本类型(int、bool等),没有区别,都是普通的copy。
考虑以下代码部分进行交换:
//for some type T
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
和下面这个:
//for some type T
void swap(T& a, T& b) {
T temp = static_cast<T&&>(a);
a = static_cast<T&&>(b);
b = static_cast<T&&>(temp);
}
我有以下疑问: 它们之间有什么区别?我的意思是为什么第一次交换比第二次交换更贵?
参考:C++编程语言7.7.2
What is the difference between them? I mean why the first swap is more expensive than the second one ?
第二个为支持它的类型启用移动(即具有移动赋值运算符)。这些类型包括标准向量、字符串等。
对于不支持move语义的基本类型(int、bool等),没有区别,都是普通的copy。