Описание тега 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…
26 янв '18 в 15:27
2
ответа
Структурированное связывание на неизвестной пользовательской структуре
Укороченная версия: Я хотел бы иметь возможность преобразовать структуру в кортеж. По крайней мере, тип. В приведенном ниже коде функция convertToTuple не работает, поскольку переменные параметры не могут использоваться в структурированных привязках…
17 июн '18 в 21:20
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 &…
27 июн '16 в 07:11
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()…
15 апр '18 в 18:35
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, однако стандарт все еще запрещает это. В этом случае, однако, разве не должно быть запрещено использование структурированных прив…
16 сен '17 в 12:37
2
ответа
Почему включение <utility> нарушает структурированные привязки в GCC?
Рассматривать: struct Point { int x, y; }; int main() { const auto [x, y] = Point{}; } Этот код прекрасно компилируется с gcc 7.1 в режиме C++17, однако этот: #include <utility> 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…
18 ноя '17 в 12:44
1
ответ
Почему объявления декомпозиции не могут быть constexpr?
Рассмотрим следующий фрагмент кода для проверки готовящихся объявлений декомпозиции функций C++17 (ранее называвшихся структурированными привязками). #include <cassert> #include <utility> constexpr auto divmod(int n, int d) { return std:…
12 янв '17 в 21:01
1
ответ
Структурированные привязки, ссылка? Можно ли их удалить
Допустим, у меня есть такой кортеж. std::tuple<int &, int> tuple{}; Я хочу сделать что-то подобное: auto [i1, i2] = tuple; // Here i1 is lvalue reference, i2 is int i1 является ссылкой lvalue, потому что первое значение в кортеже является …
11 мар '18 в 02:01