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

C ++ 20 является целью для версии C ++ после C ++ 17. Этот тег следует использовать (вместе с тегом C ++) для вопросов о возможностях C ++ на пути к C ++ 20.

3
std :: bit_cast с std :: array
В своем недавнем выступлении « Обработка типов в современном C ++» Тимур Думлер сказал, что std::bit_castего нельзя использовать для floatпреобразования битов в unsigned char[4]массив, потому что массивы в стиле C не могут быть возвращены из функции. Мы должны либо использовать, std::memcpyлибо подождать до C ++ 23 (или позже), когда что-то …

1
Почему типы выражений менялись в C ++ между версиями?
Я пытаюсь понять типы выражений C ++, и чем больше я читаю, тем больше я запутался, поскольку нахожу черновик C ++ очень сложным для восприятия и поэтому предпочитаю другие ресурсы, но они либо противоречат друг другу, либо не учитывают, что формулировка и определение между версиями C ++ сильно изменяются. Далее …
13 c++  c++11  c++14  c++17  c++20 

1
Требуется ли для «равенства_компараблей_схем» `общего_референции`?
Концепцияequality_­comparable_with<T, U> призвана заявить , что объекты типа Tи Uмогут быть сравнены равны друг другу, и если они есть, то это имеет ожидаемый смысл. Хорошо. Тем не менее, эта концепция также требует common_reference_t<T&, U&>существования. common_referenceПохоже, что основным стимулом для его сопутствующей функциональности является предоставление возможности прокси-итераторам иметь возможность представлять отношения …

1
Определение C ++ 20 вне класса в шаблонном классе
Вплоть до C ++ 20 стандарта C ++, когда мы хотели определить внеклассный оператор, который использует некоторые закрытые члены шаблонного класса, мы использовали конструкцию, подобную этой: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename T> class Foo { public: constexpr Foo(T …
12 c++  templates  c++20 

1
Стандартно ли гарантировано, что лямбда без захвата будет пустой?
Я ищу способ идентифицировать пустые (без захвата) лямбды из других лямбд в функции шаблона. В настоящее время я использую C ++ 17, но мне тоже интересно узнать ответы на C ++ 20. Мой код выглядит так: template<typename T> auto func(T lambda) { // The aguments of the lambdas are unknown …
12 c++  lambda  c++17  c++20 

1
Что предотвращает перекрытие смежных членов в классах?
Рассмотрим следующие три structс: class blub { int i; char c; blub(const blub&) {} }; class blob { char s; blob(const blob&) {} }; struct bla { blub b0; blob b1; }; На типовых платформах, где int4 байта, размеры, выравнивания и общее заполнение 1 следующие: struct size alignment padding -------- …

1
Как менеджеры пакетов Linux будут обрабатывать модули C ++ 20?
Мы находимся в 2020 году, и C ++ 20 идет вместе с долгожданной функцией модулей C ++. Но после просмотра нескольких выступлений на CppCon я обнаружил, что модули C ++ находятся в странном месте, особенно для менеджеров пакетов Linux (pacman, apt, emerge и т. Д.) Из того, что я узнал, …

2
Передача концепции в функцию
Поскольку понятия определены как предикаты времени компиляции, возможно ли также фактически использовать эти предикаты для алгоритмов времени компиляции? Например, можно ли проверить, все ли типы в кортеже соответствуют концепции? Насколько я видел, невозможно передать концепцию какой-либо функции, что побуждает меня вернуться к использованию шаблонов для этих случаев. #include <type_traits> template<typename …

1
Могут ли быть разные неявные объекты, основанные на более позднем решении времени выполнения в C ++ 20?
Этот вопрос относится к добавлению P0593 к последней версии C ++ 20 . Вот мой пример: #include <cstdlib> #include <cstdio> void foo(void *p) { if ( std::getchar() == 'i' ) { *(int *)p = 2; std::printf("%d\n", *(int *)p); } else { *(float *)p = 2; std::printf("%f\n", *(float *)p); } } …

4
Прерывание изменений в C ++ 20 или регрессия в clang-trunk / gcc-trunk при перегрузке сравнения равенства с небулевым возвращаемым значением?
Следующий код прекрасно компилируется с clang-trunk в режиме c ++ 17, но прерывается в режиме c ++ 2a (предстоящий c ++ 20): // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{};} }; int main() …

1
Может ли span быть constexpr?
Все конструкторы std :: span объявлены constexpr, однако я не могу заставить их работать в контексте constexpr. Раскомментирование любого из constexpr ниже приведет к ошибке компиляции. #include <array> #include <span> int main() { constexpr int carray[3] = { 0, 1, 2 }; constexpr std::array<int, 3> array{ 0, 1, 2 }; …
11 c++  constexpr  c++20 

1
Почему в std :: span отсутствуют операторы сравнения?
Разве это не было std::spanразработано как облегченная ссылка на подобласти массиваstd::vector / std::array/ plain ? Разве он не должен содержать операторы сравнения в своем API, чтобы соответствовать им? Что было причиной исключения? Примечание: операторы сравнения, я имею в виду либо полный набор ( <, <=, ...) или космический корабль<=>
10 c++  std  c++20  std-span 

1
Разрешена ли арифметика указателей на выделенном хранилище начиная с C ++ 20?
В стандарте C ++ 20 говорится, что типы массивов являются неявными типами времени жизни . Означает ли это, что массив неявного типа времени жизни может быть создан неявно? Неявное создание такого массива не будет вызывать создание элементов массива? Рассмотрим этот случай: //implicit creation of an array of std::string //but not …

1
Сможем ли мы создавать контейнеры с представлениями в C ++ 20?
Диапазоны идут к C ++ со стандартной версией C ++ 20. Мой вопрос: сможем ли мы создать (существующие) контейнеры стандартной библиотеки с любым диапазоном? И что еще важнее, с диапазоном просмотров? Например, будет ли это: #include <vector> #include <iostream> #include <ranges> int main() { auto sq = [](int x) { …
10 c++  c++20  range-v3 

1
Разрешено ли выражениям «требуется» захватывать переменные вмещающей области?
В следующем примере аргументы функции используются для проверки с помощью выражения require, правильно ли сформировано выражение, использующее их. Выражение require не имеет аргументов; он напрямую использует переменные в области действия функции: #include <cstddef> #include <vector> template<typename T> void Resize(T &v, std::size_t const n) { if constexpr (requires { v.resize(n); }) …

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