«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `std :: ecector :: reference`` `bool &`?

Почему `std :: ecector :: reference`` `bool &`?

Опубликовано в 2025-03-11
Просматривать:244

Why Doesn't `std::vector::reference` Return a `bool&`?

почему Vector :: ссылка не возвращает ссылку на Bool?

в c, std :: evector контейнер специализирован для булевых значений. Эта специализация вводит различия в поведении по сравнению с векторами других типов данных.

проблема

В приведенном примере используется функция Calliftoggled для переключения значения Bool и вызвать метод в структуре. При попытке передать ссылку на элемент std :: vector Calliftoggled, возникает ошибка компиляции. Это связано с тем, что ссылочный тип, возвращаемый Vector :: Справочник не является ожидаемой Bool &.

Причина

в рамках специализации вектора Bool, Vector :: ссылка возвращает ссылку на символ, а не в Bool. Это делается для оптимизации производительности с использованием кусочков для логических значений.

решения

  • используйте вектор вместо: заменить вектор bool на вектор для работы в специализации. Библиотека:
  • Библиотека контейнеров Boost предоставляет неопределенную версию Vector , которая предлагает истинную ссылку на значения Bool.
  • обернуть значения Bool в структуре:
  • создать структуру обертки вокруг Bool, называемого Mybool. Это позволяет передавать ссылку на обертку, которая, в свою очередь, обеспечивает косвенный доступ к базовому значению Bool.
  • ]
  • пример (вектор char):

#Incult структура а { void foo () {} }; Шаблон void calliftoggled (char v1, char & v2, t & t) { if (v1! = v2) { v2 = v1; t.foo (); } } int main () { std :: vector v = {false, true, false}; const char f = false; А; calliftoggled (f, v [0], a); calliftoggled (f, v [1], a); calliftoggled (f, v [2], a); } ]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3