Информация об изменениях

Сообщение Re[7]: Не очень понимаю, как на модных плюсиках сделать таку от 21.09.2023 22:24

Изменено 21.09.2023 22:37 rg45

Re[7]: Не очень понимаю, как на модных плюсиках сделать таку
Здравствуйте, Marty, Вы писали:

M>А ещё не разжуёшь вот это:

M>
M>for (auto && impl : m_tail)
M>


Ну impl — это имя переменной цикла, которая, в данном случае, представляет собой ссылку на элемент вектора m_tail. Двойной амперсанд здесь используется как универсальный вариант доступа к контейнерам с различной константностью — если контейнер константный то ссылка на элемент будет константной, а если контейнер неконстантный, то и ссылка будет неконстантной. Хотя в данном случае это и не имеет особого значения, я мог бы вместо auto&& написать const auto& или просто auto и тоже все работало бы, просто по привычке использовал наиболее обобщенную запись. Описанный механизм известен под названием Forwarding references.
Re[7]: Не очень понимаю, как на модных плюсиках сделать таку
Здравствуйте, Marty, Вы писали:

M>А ещё не разжуёшь вот это:

M>
M>for (auto && impl : m_tail)
M>


Ну impl — это имя переменной цикла, которая, в данном случае, представляет собой ссылку на элемент вектора m_tail. Двойной амперсанд здесь используется как универсальный вариант доступа к контейнерам с различной константностью — если контейнер константный то ссылка на элемент будет константной, а если контейнер неконстантный, то и ссылка будет неконстантной. Хотя в данном случае это и не имеет особого значения, я мог бы вместо auto&& написать const auto& или просто auto и тоже все работало бы, просто по привычке использовал наиболее обобщенную запись. Описанный механизм известен под названием Forwarding references.

А вообще такая форма цикла for — это и есть как раз тот самый range-for, о котором я умоминал выше, и это является аналогом следующей записи:

for (auto it = m_tail.begin(); it != m_tail.end(); ++it)
{
   auto&& impl = *it;
   // . . .
}


А в C++03 полгого аналога вообще не существовало, поскольку там всегда нужно было указывать явно, какой тип итератора ты используешь — константный, или неконстантный.