Почему я не могу сделать вектор ссылок?

Если вам нужны X последних битов вашего целого числа, используйте двоичную маску :

unsigned last8bitsvalue=(32 bit integer) & 0xFF
unsigned last16bitsvalue=(32 bit integer) & 0xFFFF

328
задан Jonas 18 November 2019 в 10:15
поделиться

5 ответов

Тип компонента контейнеров, таких как векторы, должен быть назначаемым . Ссылки не назначаются (вы можете инициализировать их только один раз, когда они объявлены, и вы не можете заставить их ссылаться на что-то еще позже). Другие неназначаемые типы также не допускаются в качестве компонентов контейнеров, например vector не допускается.

315
ответ дан 23 November 2019 в 00:48
поделиться

По самой своей природе ссылки могут быть установлены только во время их создания; т.е. следующие две строки имеют очень разные эффекты:

int & A = B;   // makes A an alias for B
A = C;         // assigns value of C to B.

Кроме того, это недопустимо:

int & D;       // must be set to a int variable.

Однако, когда вы создаете вектор, нет способа присвоить значения его элементам при создании. По сути, вы просто делаете целую группу из последнего примера.

30
ответ дан 23 November 2019 в 00:48
поделиться

Это недостаток языка C ++. Вы не можете взять адрес ссылки, поскольку попытка сделать это приведет к получению адреса объекта, на который делается ссылка, и, следовательно, вы никогда не сможете получить указатель на ссылку. std :: vector работает с указателями на свои элементы, поэтому на сохраняемые значения должна быть возможность указывать. Вместо этого вам придется использовать указатели.

12
ответ дан 23 November 2019 в 00:48
поделиться

boost :: ptr_vector будет работать.

Edit: было предложением использовать std :: vector > , который не будет работать, потому что вы не можете создать по умолчанию boost :: ref .

14
ответ дан 23 November 2019 в 00:48
поделиться

Как уже упоминалось, вы, вероятно, в конечном итоге будете использовать вместо этого вектор указателей.

Однако вы можете рассмотреть возможность использования вместо этого ptr_vector !

]
3
ответ дан 23 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: