在以下代码中,我的目标是测试1 3 5 7 9
行。我不确定原因,但调用此函数并不会将outerFunction(myTest).setPrivateVar(5);
privateVar
成员更改为5,但调用myTest
会正确显示值200.任何人都可以解释为什么会这样?
cout << outerFunction(myTest).readPrivateVar
输出:
#include <iostream>
using namespace std;
class Test {
private:
int privateVar;
public:
void setPrivateVar(int);
int readPrivateVar();
};
void Test::setPrivateVar(int privateVarSet) {
privateVar = privateVarSet;
}
int Test::readPrivateVar() {
return privateVar;
}
Test outerFunction(Test passedTest) {
return passedTest;
}
int main(int argc, char* args[]) {
Test myTest;
myTest.setPrivateVar(200);
cout << myTest.readPrivateVar() << endl;
outerFunction(myTest).setPrivateVar(5);
cout << outerFunction(myTest).readPrivateVar() << endl;
return 0;
}
答案 0 :(得分:5)
你在这里制作副本,无论是在你将某些东西传递给该函数还是当它返回时:
Test outerFunction(Test passedTest) {
return passedTest;
}
对outerFunction(myTest)
的修改会影响副本,而不是原始版本。
要获得您似乎想要的语义,您需要使用引用:
Test& outerFunction(Test& passedTest) {
return passedTest;
}