【发布时间】:2023-04-04 16:50:01
【问题描述】:
考虑以下交换代码部分:
//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
【问题讨论】:
-
第一个复制三个副本,第二个复制你的移动。一般来说,移动比复制更有效,但显然它确实取决于被移动或复制的对象的类型。
标签: c++ c++11 c++14 rvalue-reference rvalue