#include <bits/stdc++.h>
using namespace std;
vector<int> func()
{
vector<int> a(3,100);
return a;
}
int main()
{
vector<int> b(2,300);
//b.swap(func()); /* why is this not working? */
func().swap(b); /* and why is this working? */
return 0;
}
在上面的代码中,b. swapp(func())
没有编译。它给出了一个错误:
没有匹配函数调用'std::向量
但是,当编写为func(). wap(b)
时,它会编译。
它们之间到底有什么区别?
func()
返回一个临时对象(右值)。
std::向量::swapp()
接受一个非const向量
void swap( vector& other );
临时对象不能绑定到非常量引用(它可以绑定到常量引用)。这就是为什么b. wap(func());
不编译。
可以在临时对象超出范围之前对其调用方法,并且可以将命名变量(左值)绑定到非常量引用。这就是func(). swapb(b)
编译的原因。