Вопросы с тегом «c++17»

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

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 &&() constи 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, …

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 :: option по заданным критериям
Как по заданному варианту 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 с 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 :: atomic ведет себя по-разному в 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, является ли перечисление непрерывным ? Полностью допустимо указывать значения enum, которых нет. Есть ли такая особенность, как черта типа в C ++ 14, C ++ 17 или, может быть, C ++ 20, чтобы проверить, является ли enum непрерывным? Это будет использоваться в …
17 c++  c++11  c++14  c++17  c++20 

1
Любые ошибки заменить глобальный const char [] на constexpr string_view?
Наша команда работает с базой кода C ++ более 10 лет и недавно перешла на компилятор C ++ 17. Поэтому мы ищем способы модернизировать наш код. В ходе конференции на YouTube я услышал предложение заменить const char*глобальные строки на constexpr string_view. Поскольку const char*в нашем коде есть довольно много таких …

1
std :: pair <auto, auto> тип возвращаемого значения
Я играл с autoв std::pair. В приведенном ниже коде функция fдолжна возвращать std::pairтипы, которые зависят от параметра шаблона. Рабочий пример: Пример 1 template &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; // …

1
Как компиляторы c ++ находят переменную extern?
Я компилирую эту программу с помощью g ++ и clang ++. Есть разница: g ++ печатает 1, а clang ++ печатает 2. Кажется, что g ++: внешняя переменная определена в самой короткой области видимости. clang ++: внешняя переменная определена в самой короткой глобальной области видимости. Есть ли в C ++ …

1
Является ли разница между двумя экземплярами constexpr указателей __func__ все еще constexpr?
Это действительный C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC и MSVC считают, что все в порядке, Clang считает, что это не так: Compiler Explorer . Все компиляторы соглашаются, что с этим все в порядке: Compiler Explorer . int main() { constexpr …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.