Описание тега structured-bindings

Структурированные привязки - это функция C++17 (ранее называвшаяся C++1z), которая позволяет объявлять несколько переменных, инициализированных из кортежа или структуры.
1 ответ

Распаковка переменных-кортежей в C++17

Есть ли что-нибудь лучше в C++17 (может быть, C++2a), чем классический C++14 способ распаковать переменную кортеж с std::index_sequence? Что-нибудь лучше, чем это: template <typename ...I> class MultiIterator { public: MultiIterator(I const&am…
2 ответа

Структурированное связывание на неизвестной пользовательской структуре

Укороченная версия: Я хотел бы иметь возможность преобразовать структуру в кортеж. По крайней мере, тип. В приведенном ниже коде функция convertToTuple не работает, поскольку переменные параметры не могут использоваться в структурированных привязках…
1 ответ

Структурированные привязки и обязательное копирование

Если вы используете структурированные привязки, как так auto [a, b, c] = std::make_tuple(1, 10.0, "string object"s); тогда копии из возвращенного кортежа будут удалены, а объекты будут отправлены прямо в a, b а также c или инициализация будет констр…
21 янв '17 в 21:36
2 ответа

Структурированный переплет и галстук ()

Учитывая эти заявления: int a[3] {10,20,30}; std::tuple<int,int,int> b {11,22,33}; Я могу использовать объявления структурированной привязки для декодирования a а также b: auto [x1,y1,z1] = a; auto [x2,y2,z2] = b; Но если x1, y1и т.д. уже суще…
30 мар '18 в 12:28
2 ответа

Структурированные привязки: когда что-то выглядит как ссылка и ведет себя аналогично ссылке, но это не ссылка

Вчера я видел интересный вопрос на SO о структурированном связывании.Мы можем подвести итог следующим образом. Рассмотрим пример кода ниже: #include <tuple> #include <type_traits> int main() { auto tup = std::make_tuple(1, 2); auto &…
22 июн '17 в 09:39
0 ответов

Лямбда-захват структурированных привязок

Как я понимаю, C++17 не запрещает лямбда-выражениям захватывать структурированные привязки. ниже принимается gcc но отклонено clang Тем не менее, cppreference утверждают, что лямбды не могут фиксировать структурированные привязки. int arr[] {0, 1}; …
19 сен '18 в 19:30
2 ответа

Тип привязки ссылки из std::tuple

Какой тип a Вот? #include <iostream> #include <tuple> using namespace std; int main() { float x{}; std::tuple<int> tpl( x ); auto& [ a ] = tpl; static_assert( std::is_same_v< decltype( a ), int> ); //static_assert( std::i…
31 дек '18 в 10:55
2 ответа

Почему структурированные привязки работают только с авто

Структурированные привязки были введены в C++17. Они дают возможность объявлять несколько переменных, инициализированных из кортежа или структуры. Этот код компилируется с использованием c++17 компилятор. #include <iostream> #include <tupl…
16 окт '17 в 07:02
2 ответа

Идентификаторы структурированного связывания инициализируются по порядку?

Это было трудно вывести из предложения.Будут ли структурированные привязки C++17 инициализировать свои идентификаторы слева направо? Гарантируется ли это печать "сначала", "второй", затем "третий"? #include <iostream> struct A{ A(){std::cout &…
1 ответ

Структурированное связывание с [[Maybe_unused]]

Функциональные языки с сопоставлением с образцом (иногда?) Имеют возможность игнорировать некоторые связанные значения, но в структурированных привязках C++17, похоже, нет способа сделать это ( std:: ignore со структурированными привязками?). Рекоме…
30 дек '16 в 23:33
1 ответ

Структурированные привязки на основе диапазона с вектором

Я пытаюсь перебрать вектор кортежей: std::vector<std::tuple<int, int, int>> tupleList; Используя диапазон для цикла со структурированными привязками: for (auto&& [x, y, z] : tupleList) {} Но Visual Studio 2017 15.3.5 выдает ошибк…
04 окт '17 в 18:28
3 ответа

Каковы варианты использования для структурированных привязок?

Стандарт C++17 вводит новую функцию структурированных привязок, которая была первоначально предложена в 2015 году и чей синтаксический вид широко обсуждался позже. Некоторые варианты их использования приходят на ум, как только вы просматриваете доку…
03 авг '17 в 09:56
1 ответ

Почему GCC диагностирует неиспользуемую переменную для структурированных привязок, а Clang - нет?

Давайте начнем с минимального примера: #include <utility> int main() { auto [a, b] = std::pair(1, 'A'); return a; } Компиляция с прохождением GCC 7.3 -std=c++17 а также -Wunused-variable и запустить его: <source>: In function 'int main()…
1 ответ

Переменные, помеченные как const с использованием структурированных привязок, не являются постоянными

Я писал набор классов, чтобы позволить простой Python-как zip-функции. Следующий фрагмент работает (почти) так же, как и ожидалось. Тем не менее, две переменные a а также b не const, std::vector<double> v1{0.0, 1.1, 2.2, 3.3}; std::vector<i…
15 мар '18 в 20:31
2 ответа

Если структурированные привязки не могут быть constexpr, почему они могут использоваться в функции constexpr?

Согласно этому ответу, по- видимому, нет веской причины, по которой структурированные привязки не могут быть constexpr, однако стандарт все еще запрещает это. В этом случае, однако, разве не должно быть запрещено использование структурированных прив…
2 ответа

Почему включение <utility> нарушает структурированные привязки в GCC?

Рассматривать: struct Point { int x, y; }; int main() { const auto [x, y] = Point{}; } Этот код прекрасно компилируется с gcc 7.1 в режиме C++17, однако этот: #include &lt;utility&gt; struct Point { int x, y; }; int main() { const auto [x, y] = Poin…
10 май '17 в 13:56
4 ответа

Структурированная привязка для замены std::tie abuse

Прочитав это краткое изложение заключительных возможностей C++17, я был немного удивлен разделом о структурированных привязках (выделено мое): структурированные привязки До сих пор был известен трюк с использованием std::tie для непосредственного пр…
25 окт '16 в 13:29
1 ответ

qtcreator не выполняет автозаполнение при использовании структурных привязок?

Кажется, у меня проблема с qtcreator, который не выполняет автозаполнение моего кода, что довольно раздражает. В настоящее время это не в состоянии автозаполнения, когда я пытаюсь использовать структурные привязки для циклов, как это.. std::vector&l…
1 ответ

Почему объявления декомпозиции не могут быть constexpr?

Рассмотрим следующий фрагмент кода для проверки готовящихся объявлений декомпозиции функций C++17 (ранее называвшихся структурированными привязками). #include &lt;cassert&gt; #include &lt;utility&gt; constexpr auto divmod(int n, int d) { return std:…
12 янв '17 в 21:01
1 ответ

Структурированные привязки, ссылка? Можно ли их удалить

Допустим, у меня есть такой кортеж. std::tuple&lt;int &amp;, int&gt; tuple{}; Я хочу сделать что-то подобное: auto [i1, i2] = tuple; // Here i1 is lvalue reference, i2 is int i1 является ссылкой lvalue, потому что первое значение в кортеже является …
11 мар '18 в 02:01