Ere*_*evi 0 c++ move-semantics
这个 C++ 代码:
void f(int& i) {
cout << "by reference" << endl;
}
void f(const int& i) {
cout << "by const reference" << endl;
}
void f(int&& i) {
cout << "by rvalue reference" << endl;
}
int main() {
int x;
const int y = 5;
cout << "f(x): ";
f(x);
cout << "f(y): ";
f(y);
cout << "f(x+y): ";
f(x+y);
cout << "f(move(x)): ";
f(move(x));
cout << "f(move(y)): ";
f(move(y));
cout << "f(move(x+y)): ";
f(move(x+y));
}
Run Code Online (Sandbox Code Playgroud)
印刷:
f(x): by reference
f(y): by const reference
f(x+y): by rvalue reference
f(move(x)): by rvalue reference
f(move(y)): by const reference
f(move(x+y)): by rvalue reference
Run Code Online (Sandbox Code Playgroud)
我理解除第五行之外的所有行:为什么“move(y)”不让编译器使用右值引用选择 f 的重载?我怎样才能让编译器选择这个变体?
为什么“move(y)”不让编译器使用右值引用选择 f 的重载
因为int &&是非常量引用,参数是const.
我怎样才能让编译器选择这个变体?
或者通过改变功能参数const int &&(或通过除去const从y),
但通常您不想使用const右值引用。移动的全部意义在于从被移动的对象中窃取资源。如果对它的引用是const.