Как добиться python -подобного поведения со ссылками в c ++? - PullRequest
4 голосов
/ 25 февраля 2020

В python, если я это сделаю:

a = []
b = a 
a.append(1)
b[0] == 1 

Это прекрасно работает, так как и a, и b указывают на базовый объект в куче.

Каким будет эквивалентный код C ++?

Ответы [ 3 ]

5 голосов
/ 25 февраля 2020

Каким будет эквивалентный код C ++?

Приличный перевод:

std::vector<int> a;
auto& b = a;
a.push_back(1);
b[0] == 1;

Ключ к семантике ссылки - это использование ссылочной переменной.

1 голос
/ 25 февраля 2020

Вы можете использовать shared_ptr: все копии работают с одним экземпляром данных. И вы сможете переназначить новый экземпляр для операций (это лучше, чем ссылка).

0 голосов
/ 25 февраля 2020

Хотя ссылка должна быть предпочтительна, когда это возможно, из-за ее простоты, просто для полноты, здесь решение с общим указателем:

#include <iostream>
#include <memory>
#include <vector>

int main()
{
 auto a = std::make_shared<std::vector<int>>();
 auto b = a;
 a->push_back(1);

 std::cout << "This is One: " << (*b)[0] << "\n";
}

Да, c ++ может выглядеть очень плохо по сравнению с python для тривиальные вещи ... По крайней мере, теперь у нас есть "auto", чтобы избежать повторного ввода: std::shared_ptr<std::vector<int>> в этом случае.

...