将 return 值传递给通过引用调用的函数
Passing return value to a function called by reference
我有一个函数可以处理自定义类型的对象 (class)。
为了避免复制该对象,我想让我的函数通过引用来使用它。
这对于代码创建的对象来说工作正常,但对于方法返回的相同类型的对象,它就不行了。
这是一个简单的整数示例,其中 areEqual 是函数:
#include <iostream>
using namespace std;
class part
{
int i_Nbr;
public:
part(int n){
i_Nbr = n;
}
int getNbr(){
return i_Nbr;
}
};
bool areEqual(int& q1, int& q2){
return q1==q2;
}
int main(){
int i1 = 50;
int i2 = 60;
part a(240);
part b(220);
bool eq;
// this works
eq = areEqual(i1, i2 );
cout << eq << endl;
// but this doesn't
eq = areEqual(a.getNbr(), b.getNbr() );
cout << eq << endl;
return 0;
}
在我的例子中,对象不是整数,而是具有许多内部变量和方法的 class 的实例。
有没有办法正确地做到这一点?
更新:
by 不起作用我的意思是我遇到了一个编译错误:
file.cpp:32:28: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
bool eq = areEqual(a.getNbr(), b.getNbr() );
不起作用,因为函数 return 和 int
是 areEqual
调用中的临时对象。当参数类型为 int&
时,不能使用临时对象。使用 int const&
作为 areEqual
中的参数类型或简单地 int
.
bool areEqual(int const& q1, int const& q2){ ... }
或
bool areEqual(int q1, int q2){ ... }
我有一个函数可以处理自定义类型的对象 (class)。 为了避免复制该对象,我想让我的函数通过引用来使用它。
这对于代码创建的对象来说工作正常,但对于方法返回的相同类型的对象,它就不行了。
这是一个简单的整数示例,其中 areEqual 是函数:
#include <iostream>
using namespace std;
class part
{
int i_Nbr;
public:
part(int n){
i_Nbr = n;
}
int getNbr(){
return i_Nbr;
}
};
bool areEqual(int& q1, int& q2){
return q1==q2;
}
int main(){
int i1 = 50;
int i2 = 60;
part a(240);
part b(220);
bool eq;
// this works
eq = areEqual(i1, i2 );
cout << eq << endl;
// but this doesn't
eq = areEqual(a.getNbr(), b.getNbr() );
cout << eq << endl;
return 0;
}
在我的例子中,对象不是整数,而是具有许多内部变量和方法的 class 的实例。 有没有办法正确地做到这一点?
更新: by 不起作用我的意思是我遇到了一个编译错误:
file.cpp:32:28: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
bool eq = areEqual(a.getNbr(), b.getNbr() );
不起作用,因为函数 return 和 int
是 areEqual
调用中的临时对象。当参数类型为 int&
时,不能使用临时对象。使用 int const&
作为 areEqual
中的参数类型或简单地 int
.
bool areEqual(int const& q1, int const& q2){ ... }
或
bool areEqual(int q1, int q2){ ... }