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

238
Что такое «промежуток» и когда я должен его использовать?

Недавно я получил предложения использовать span<T>их в своем коде или увидел здесь некоторые ответы на сайте, которые используют span- предположительно, какой-то контейнер. Но - я не могу найти ничего подобного в стандартной библиотеке C ++ 17. Так что же это за таинственное span<T>и...

214
Что такое оператор <=> в C ++?

В то время как я пытался узнать о C ++ операторов, я наткнулся на операторе странного сравнения на cppreference.com , * в таблице , которая выглядит следующим образом : «Ну, если это обычные операторы в C ++, я лучше их изучу», - подумал я. Но все мои попытки выяснить эту тайну оказались...

161
Почему мы требуем требует требует?

Один из углов концепций C ++ 20 заключается в том, что есть определенные ситуации, в которых вы должны писать requires requires. Например, этот пример из [expr.prim.req] / 3 : Требуется выражение также может быть использовано в требуете-положение ([Темп]) в качестве способа написания специальных...

106
Обязан ли C ++ 20 хранить исходный код в файлах?

Однако немного странный вопрос, если я правильно помню, исходный код C ++ не требует файловой системы для хранения файлов. Наличие компилятора, который сканирует рукописные документы через камеру, было бы соответствующей реализацией. Хотя практически не имеет особого смысла. Однако C ++ 20 теперь...

104
Что такое сопрограммы в C ++ 20?

Что такое сопрограммы в c ++ 20? Чем он отличается от «Parallelism2» и / или «Concurrency2» (посмотрите на изображение ниже)? Изображение ниже взято из ISOCPP. https://isocpp.org/files/img/wg21-timeline-2017-03.png...

100
Почему std :: ssize () введен в C ++ 20?

C ++ 20 представил std::ssize()бесплатную функцию, как показано ниже: template <class C> constexpr auto ssize(const C& c) -> std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(c.size())>>; Возможная реализация, похоже, использует static_castдля преобразования...

99
Зачем нужны лямбда-выражения шаблона, представленные в C ++ 20, если в C ++ 14 уже есть общая лямбда-выражение?

c ++ 14 представили общие лямбды, которые позволили написать следующее: auto func = [](auto a, auto b){ return a + b; }; auto Foo = func(2, 5); auto Bar = func("hello", "world"); Совершенно очевидно, что эта общая лямбда funcработает так же, как и шаблонная функция func. Почему комитет C ++ решил...

96
Использует malloc для поведения int undefined до C ++ 20

Мне сказали, что следующий код имеет неопределенное поведение до C ++ 20: int *p = (int*)malloc(sizeof(int)); *p = 10; Это правда? Аргументом было то, что время жизни intобъекта не начинается до присвоения ему значения ( P0593R6 ). Для устранения проблемы newследует использовать размещение: int *p...

51
Оператор равенства не определен для пользовательской реализации оператора космического корабля в C ++ 20

Я столкнулся со странным поведением с новым оператором космического корабля <=>в C ++ 20. Я использую компилятор Visual Studio 2019 с /std:c++latest. Этот код компилируется нормально, как и ожидалось: #include <compare> struct X { int Dummy = 0; auto operator<=>(const X&)...

44
Почему оператор! = Удален в C ++ 20 для многих стандартных типов библиотек?

Согласно cppreference , std::type_info::operator!=удаляется с C ++ 20, однако, по- std::type_info::operator==видимому, остается. В чем причина? Я мог бы согласиться с тем, что сравнивать неравенство бессмысленно, но тогда сравнивать равенство было бы так же бессмысленно, не так ли? Точно так же...

24
какой случай использования для явного (bool)

В C ++ 20 введен явный (bool), который условно выбирает во время компиляции, сделан ли конструктор явным или нет. Ниже приведен пример, который я нашел здесь . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename T>...

23
C ++ 20 Основные понятия: какая специализация шаблона выбирается, когда аргумент шаблона соответствует нескольким понятиям?

Данный : #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T>...

22
Использование переменной в собственном инициализаторе

[basic.scope.pdecl] / 1 стандартного черновика C ++ 20 содержал в примечании следующий (ненормативный) пример (частичная цитата до запроса на объединение 3580 , см. ответ на этот вопрос): unsigned char x = x; [...] x инициализируется своим собственным (неопределенным) значением. Это на самом деле...

22
Является ли тип POD в точности эквивалентным тривиальному типу стандартной компоновки?

В C ++ 20 концепция POD устарела, предположительно потому, что это бессмысленная составная черта тривиальности и стандартной компоновки. Однако определение POD в проекте C ++ 20 не совсем «тривиально и стандартно»; это на самом деле: Класс POD - это класс, который является как тривиальным классом,...

22
'auto' как заполнитель аргумента шаблона для параметра функции

C ++ 20 позволяет использовать autoдля параметра типа функции. Позволяет ли он также использовать autoв качестве заполнителя аргумента шаблона (не похоже, но в духе C ++ 17 template <auto> в некотором смысле) для типа параметра функции? Итак, следующий код, предварительно C ++ 20:...