我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
?
由于
答案 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类添加成员函数以处理操作成员列表,而不是要求调用者调用列表本身的函数。不过,我不知道这是否符合你的用法。