вопрос по c ++ - PullRequest
       41

вопрос по c ++

0 голосов
/ 24 апреля 2011

предположим, у меня есть этот вектор

vector<Object> m;

, а затем у меня есть следующие назначения:

vector<Object> o = m;
vector<Object> k = &m;

вектор o будет копией вектора m, тогда как вектор k будет указывать наточно такой же объект, как вектор m .... я прав?

другими словами, если я пойду, o.push_back(something), это изменит вектор o, но не вектор m, тогда как если я пойду k.push_back(something), этодействительно изменит вектор м.

я не прав или прав?

Ответы [ 3 ]

6 голосов
/ 24 апреля 2011

Правильно для o, неправильно для k.

vector<Object> k = &m;
//                 ^^ -- you're taking the address of m here

Чтобы сделать ссылку, используйте

vector<Object>& k = m;
//            ^ -- this makes a reference
2 голосов
/ 24 апреля 2011

Да, это концептуально правильно - за исключением того, что вы пропустили звездочку или, возможно, использовали слишком много амперсанда в вашем образце.

vector<Object> o = m;
vector<Object>* k = &m; // use address-of (&) to create a pointer (*) to m

Указатели всегда несут это * с ними.

Теперь m.push_back(...) и k->push_back(...) изменяют один и тот же объект.Обратите внимание на использование ->, которое используется для доступа к элементу указателя.

Если вы хотите создать ссылку, вы не используете & - думайте, что это делается неявно с помощьюкомпилятор:

vector<Object>& k = m; // no address-of here, but k is a reference to m

сейчас, k.push_back() может использоваться для доступа к m.

1 голос
/ 24 апреля 2011

Этот код даже не скомпилируется. Тип выражения &m - vector<Object>*, который нельзя присвоить переменной k (ее тип vector<Object>).

Возможно, вы хотели это сделать:

vector<Object> o = m;
vector<Object>& k = m;

, в этом случае o будет копией m (в результате * o и m будут иметь копии одних и тех же элементов, поэтому изменение содержимого одного не повлияет на содержимое другого) и m и k будут ссылаться на один и тот же экземпляр (поэтому любое изменение в экземпляре, использующем одну из двух переменных, будет сразу же видно при обращении к вектору, использующему другую переменную).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...