C++ 类对象引用作为函数参数:实参会改变吗?
如果函数参数是按引用传递的,则实参会被修改。这是因为在函数中对引用参数的任何更改都会影响原始对象。如果您不希望实参被修改,则可以将函数参数声明为按值传递。
引用传递
当您将类对象的引用作为函数参数传递时,您实际上是在将该对象的内存地址传递给函数。这意味着函数可以直接访问原始对象,并且对该对象的任何更改都会直接影响原始对象。
值传递
当您将类对象按值传递时,函数会创建一个该对象的副本。这意味着函数对该对象的任何更改都不会影响原始对象。
示例
#include <iostream>
class MyClass {
public:
int data;
};
void modifyByReference(MyClass &obj) {
obj.data = 100;
}
void modifyByValue(MyClass obj) {
obj.data = 100;
}
int main() {
MyClass myObject;
myObject.data = 50;
std::cout << "Before modifyByReference: " << myObject.data << std::endl;
modifyByReference(myObject);
std::cout << "After modifyByReference: " << myObject.data << std::endl;
std::cout << "Before modifyByValue: " << myObject.data << std::endl;
modifyByValue(myObject);
std::cout << "After modifyByValue: " << myObject.data << std::endl;
return 0;
}
输出:
Before modifyByReference: 50
After modifyByReference: 100
Before modifyByValue: 100
After modifyByValue: 100
如您所见,modifyByReference 函数修改了原始对象,而 modifyByValue 函数没有。
结论
当您希望函数修改原始对象时,请将类对象的引用作为函数参数传递。当您希望函数使用该对象的副本时,请将类对象按值传递。
原文地址: https://www.cveoy.top/t/topic/n2tb 著作权归作者所有。请勿转载和采集!