Запитання з тегом «c++17»

C ++ 17 - назва стандарту C ++, затвердженого в 2017 році. Він спирається на попередній стандарт C ++ 14, покращуючи основну мову та стандартну бібліотеку, додаючи кілька нових мовних функцій.

2
Підготовка до std :: iterator Не підтримується
З 21 березня ст на стандартах комітет проголосував затвердити Deprecation з std::iteratorзапропонованих в P0174 : Довга послідовність недійсних аргументів набагато менш зрозуміла для читача, ніж просто надання очікуваних typedefs у самому визначенні класу, що є підходом поточного робочого проекту, дотримуючись шаблону, встановленого вc ++ 14 Раніше c ++ 17спадщину від …

5
Як отримати адресу функції C ++ лямбда у самій лямбда?
Я намагаюся розібратися, як отримати адресу лямбда-функції всередині себе. Ось зразок коду: []() { std::cout << "Address of this lambda function is => " << ???? }(); Я знаю, що я можу зафіксувати лямбда в змінній і надрукувати адресу, але хочу зробити це на місці, коли виконується ця анонімна функція. …
53 c++  c++11  lambda  c++14  c++17 

2
Чому функція видалення_референції не працює на функції?
Натрапив на щось дивне, коли днями робив якусь метапрограмування шаблонів. Це в основному зводиться до цього твердження не (як я б очікував) ухваленням. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Спочатку я думав, що роблю синтаксичну помилку, визначаючи посилання на функцію, але це твердження проходить, показуючи, що це не так. static_assert(std::is_same_v<void()&, void()&>); Я також спробував …
38 c++  templates  types  c++17 

4
Як порівняти підпис двох функцій?
Чи є спосіб перевірити, чи мають дві функції однаковий підпис? Наприклад: int funA (int a, int b); int funB (int a, int b); float funC (int a, int b); int funD (float a, int b); У цьому прикладі funAі funBє єдиною комбінацією функцій, яку слід повернути true.

2
Як ініціалізувати C ++ 17 векторних пар з додатковим елементом
Як в C ++ 17 як оголосити і ініціалізувати вектор пар (або кортежів) з необов'язковим елементом? std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true}, {2, false}, {3, nullptr}}; У мене є пара, де другий елемент може бути нульовим / необов’язковим.

1
Клас не може отримати доступ до свого приватного статичного методу constexpr - помилка Clang?
Цей код не компілюється в Clang (6,7,8,9, магістраль), але просто добре поєднується в GCC (7.1, 8.1, 9.1): template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } else …

3
Чому обрано таке перевантаження оператора перетворення?
Розглянемо наступний код . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } Тут другий оператор перетворення вибирається за роздільною здатністю перевантаження. Чому? Наскільки я розумію, два оператори виводяться на operator int &&() …

3
Як я можу створити спосіб декартового продукту списків типів у C ++?
Пояснення самостійно. В основному, скажіть, у мене такі типи списків: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Вони можуть бути різною кількістю списків типів. Як отримати підбірку декартового продукту? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, somestructB, …

3
Чи зберігається делетер shared_ptr в пам'яті, виділений спеціальним розподільником?
Скажіть, у мене є shared_ptrспеціальний розподільник і користувацький делетер. Я не можу знайти нічого, що відповідає стандарту, який би говорив про те, де слід зберігати делетер: він не говорить про те, що користувацький розподільник буде використовуватися для пам'яті делетера, і не говорить про те, що його не буде. Це не …

4
Неявне перетворення заборонено при поверненні
#include <optional> bool f() { std::optional<int> opt; return opt; } Не компілюється: 'return': cannot convert from 'std::optional<int>' to 'bool' Посилання на консультації, я б подумав знайти пояснення, але я прочитав це як слід. Неявні перетворення виконуються щоразу, коли вираз якогось типу T1 використовується в контексті, який не приймає цей тип, …

3
Розділити заданий тип std ::: за заданими критеріями
Як за заданим типом варіанту using V = std::variant<bool, char, std::string, int, float, double, std::vector<int>>; оголосити два варіанти варіантів using V1 = std::variant<bool, char, int, float, double>; using V2 = std::variant<std::string, std::vector<int>>; де V1включає всі типи арифметики з Vі V2включає в себе всі неарифметичні типи з V? V може бути …
20 c++  c++17  std-variant 

1
Тип автоматичного повернення шаблону та неоднозначності
У мене функція шаблону перевантажена: template<typename T1, typename T2> auto overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a ? a : b; } template<typename RT, typename T1, typename T2> RT overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a …

4
Чи правильно використовувати std :: transform with std :: back_inserter?
Cppreference має такий приклад коду для std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Але це також говорить: std::transformне гарантує порядок застосування unary_opабо binary_op. Щоб застосувати функцію до порядку послідовності або застосувати функцію, що модифікує елементи послідовності, використовуйте std::for_each. Імовірно, це дозволяє паралельні …

1
Чому std :: атомний конструктор поводиться по-різному в C ++ 14 і C ++ 17
Я працюю над проектом на C ++ 11 і спробував наступний код #include <atomic> struct A { std::atomic_int idx = 1; }; int main() { return 0; } Я отримую помилку компілятора error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]' std::atomic_int idx = 1; ^ Той самий …
19 c++  c++14  c++17  stdatomic 

4
Постійний перерахунок C ++ 11
Чи є спосіб перевірити в C ++ 11, якщо перерахунок є безперервним ? Цілком справедливо давати значення перерахунків, яких немає. Чи може бути така функція, як ознака типу в C ++ 14, C ++ 17 або, можливо, C ++ 20, щоб перевірити, чи перераховується перерахунок? Це потрібно використовувати в static_assert. …
17 c++  c++11  c++14  c++17  c++20 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.