如果函数参数是按引用传递的,则实参会被修改。这是因为在函数中对引用参数的任何更改都会影响原始对象。如果您不希望实参被修改,则可以将函数参数声明为按值传递。

引用传递

当您将类对象的引用作为函数参数传递时,您实际上是在将该对象的内存地址传递给函数。这意味着函数可以直接访问原始对象,并且对该对象的任何更改都会直接影响原始对象。

值传递

当您将类对象按值传递时,函数会创建一个该对象的副本。这意味着函数对该对象的任何更改都不会影响原始对象。

示例

#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 函数没有。

结论

当您希望函数修改原始对象时,请将类对象的引用作为函数参数传递。当您希望函数使用该对象的副本时,请将类对象按值传递。

C++ 类对象引用作为函数参数:实参会改变吗?

原文地址: https://www.cveoy.top/t/topic/n2tb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录