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

时间:2012-03-29 13:03:37

标签: c++ reference copy

class A public 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

由于

6 个答案:

答案 0 :(得分:7)

这应该有效:

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

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

答案 1 :(得分:7)

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

在C ++ 11中,您甚至可以这样做:

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

add(1);
add(2);
add(3);

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

答案 2 :(得分:3)

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

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

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

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

答案 3 :(得分:2)

是的,就像这样:

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

答案 4 :(得分:2)

使用参考?

std::string a("This is a test");

std::string& b = a;

b[4] = 'L';

std::cout << a << std::endl << b << std::endl;

此处&使b成为引用,因此您将看到通过更改b来更改这两个字符串。

答案 5 :(得分:1)

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

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