在 c++ 中引用而不通过引用传递

Referencing in c++ without passing by reference

本文关键字:引用 c++      更新时间:2023-10-16

class Apublic std::list<int> object list_Class B ,带有指向类A a的指针。

在类B的方法中...

std::list my_list = a->list_;
my_list.push_back(1);
my_list.push_back(2);
my_list.push_back(3);

我知道my_list实际上是list_的副本,这就是为什么更改没有反映在原始列表中的原因。对于这个特定领域,我试图避免通过参考。无需执行以下操作...

a->list_.push_back(1);
a->list_.push_back(2);
a->list_.push_back(3);

我是否可以直接引用 A 中的list_对象,而不必每次都遍历对象a

谢谢

这应该有效:

std::list<int>& list = a->list_;
list.push_back(1);
list.push_back(2);
list.push_back(3);

基本上,我创建了一个引用A实例的list_成员的局部引用变量。

您可以使用其他答案所解释的参考

在 C++11 中,您甚至可以执行以下操作:

auto add = [&](int n) {  a->list_.push_back(n); };
add(1);
add(2);
add(3);

没有a->,甚至没有list_,甚至没有push_back()。只需三次击键:add

为什么不想使用引用?这个或指针正是你想在这里使用的。

std::list<int>& list = a->list_;

std::list<int>* pList = &a->list_;

使用指针或引用意味着通过 a->list_.push_back( ... )pList->push_back( ... ) 添加将是同一集合上的相同操作。

是的,像这样:

std::list<int>& my_list = a->list_;

使用引用?

std::string a("This is a test");
std::string& b = a;
b[4] = 'L';
std::cout << a << std::endl << b << std::endl;

在这里,&将 b 作为引用,因此您将看到两个字符串都通过更改 b 来更改。

我很好奇你为什么反对通过引用。

可以将成员函数添加到类 A 以处理成员列表的操作,而不是要求调用方调用列表本身上的函数。 不过,我不知道这是否符合您的用法。