Сообщение Re[7]: Не очень понимаю, как на модных плюсиках сделать таку от 21.09.2023 22:24
Изменено 21.09.2023 22:37 rg45
Re[7]: Не очень понимаю, как на модных плюсиках сделать таку
Здравствуйте, Marty, Вы писали:
M>А ещё не разжуёшь вот это:
M>
Ну impl — это имя переменной цикла, которая, в данном случае, представляет собой ссылку на элемент вектора m_tail. Двойной амперсанд здесь используется как универсальный вариант доступа к контейнерам с различной константностью — если контейнер константный то ссылка на элемент будет константной, а если контейнер неконстантный, то и ссылка будет неконстантной. Хотя в данном случае это и не имеет особого значения, я мог бы вместо auto&& написать const auto& или просто auto и тоже все работало бы, просто по привычке использовал наиболее обобщенную запись. Описанный механизм известен под названием Forwarding references.
M>А ещё не разжуёшь вот это:
M>
M>for (auto && impl : m_tail)
M>
Ну impl — это имя переменной цикла, которая, в данном случае, представляет собой ссылку на элемент вектора m_tail. Двойной амперсанд здесь используется как универсальный вариант доступа к контейнерам с различной константностью — если контейнер константный то ссылка на элемент будет константной, а если контейнер неконстантный, то и ссылка будет неконстантной. Хотя в данном случае это и не имеет особого значения, я мог бы вместо auto&& написать const auto& или просто auto и тоже все работало бы, просто по привычке использовал наиболее обобщенную запись. Описанный механизм известен под названием Forwarding references.
Re[7]: Не очень понимаю, как на модных плюсиках сделать таку
Здравствуйте, Marty, Вы писали:
M>А ещё не разжуёшь вот это:
M>
Ну impl — это имя переменной цикла, которая, в данном случае, представляет собой ссылку на элемент вектора m_tail. Двойной амперсанд здесь используется как универсальный вариант доступа к контейнерам с различной константностью — если контейнер константный то ссылка на элемент будет константной, а если контейнер неконстантный, то и ссылка будет неконстантной. Хотя в данном случае это и не имеет особого значения, я мог бы вместо auto&& написать const auto& или просто auto и тоже все работало бы, просто по привычке использовал наиболее обобщенную запись. Описанный механизм известен под названием Forwarding references.
А вообще такая форма цикла for — это и есть как раз тот самый range-for, о котором я умоминал выше, и это является аналогом следующей записи:
А в C++03 полгого аналога вообще не существовало, поскольку там всегда нужно было указывать явно, какой тип итератора ты используешь — константный, или неконстантный.
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 полгого аналога вообще не существовало, поскольку там всегда нужно было указывать явно, какой тип итератора ты используешь — константный, или неконстантный.