提问者:小点点

交换不使用函数作为参数


#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)时,它会编译。

它们之间到底有什么区别?


共1个答案

匿名用户

func()返回一个临时对象(右值)。

std::向量::swapp()接受一个非const向量

void swap( vector& other );

临时对象不能绑定到非常量引用(它可以绑定到常量引用)。这就是为什么b. wap(func());不编译。

可以在临时对象超出范围之前对其调用方法,并且可以将命名变量(左值)绑定到非常量引用。这就是func(). swapb(b)编译的原因。