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

C ++ 20 - ціль для версії C ++ після C ++ 17. Цей тег слід використовувати (разом із тегом C ++) для запитань щодо функцій C ++, відстежуваних для C ++ 20.

3
яка корисна скринька для явного (bool)
C ++ 20 вводить явний (bool), який умовно вибирає під час компіляції, чи буде конструктор явним чи ні. Нижче наведено приклад, який я знайшов тут . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename T> explicit(!std::is_integral_v<T>) foo(T) {} }; foo a = 123; …
24 c++  c++20  explicit 

3
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> struct wrapper<T> { wrapper() = default; void print() { std::cout << "integral" << std::endl; } }; int main() { wrapper<int> w; …

1
'auto' як заповнення аргументу шаблону для параметра функції
C ++ 20 дозволяє використовувати autoдля типу параметра параметр. Чи дозволяє це також використовувати autoяк заповнювач аргументу шаблону (не схожий, але в дусі шаблону <a +> шаблону C ++ 17) ) для типу параметра функції? Отже, наступний код, попередньо C ++ 20: template<typename First, typename Second> void printPair(const std::pair<First, Second>& …
22 c++  templates  auto  c++20 

1
Використання змінної у власному ініціалізаторі
[basic.scope.pdecl] / 1 стандартного проекту C ++ 20 мав наступний (ненормативний) приклад у примітці (часткова цитата до об'єднання запиту 3580 , див. відповідь на це запитання): unsigned char x = x; [...] x ініціалізується із власним (невизначеним) значенням. Чи насправді це чітко визначена поведінка в С ++ 20? Зазвичай самоініціалізація …

2
Чи є тип POD точно таким же, як тривіальний, стандартний тип макета?
У C ++ 20 поняття POD є застарілим, нібито тому, що це безглузда складна риса тривіальності та стандартного макета. Однак визначення POD у проекті С ++ 20 не є точно "і тривіальним, і стандартним макетом"; це насправді: Клас POD - це клас, який є і тривіальним класом, і класом стандартного …


2
Чому концепція same_as перевіряє рівність типу двічі?
Дивлячись на можливу реалізацію тієї самої концепції на https://en.cppreference.com/w/cpp/concepts/same_as, я помітив, що відбувається щось дивне. namespace detail { template< class T, class U > concept SameHelper = std::is_same_v<T, U>; } template< class T, class U > concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>; Перше питання - чому SameHelperпоняття не …
19 c++  c++20  concept 

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

1
Чому стандартний файл C ++ обробляє файл так, як це робиться?
C ++ використовує streamoffтип для відображення зміщення в потоці (файл) і визначається наступним чином у [stream.types]: using streamoff = implementation-defined ; Тип streamoff є синонімом одного з підписаних основних інтегральних типів достатнього розміру, щоб представити максимально можливий розмір файлу для операційної системи. 287) 287) Зазвичай довгий довгий. Це має сенс, …

1
Чому летуча застаріла в C ++ 20?
Відповідно до cppreference , більшість застосувань volatileключового слова повинні бути застаріли в C ++ 20. У чому недолік volatile? І яке альтернативне рішення, коли не використовується volatile?
17 c++  volatile  c++20 

2
[[no_unique_address]] і два значення одного члена
Я граю разом [[no_unique_address]]з c++20. У прикладі cppreference у нас є порожній тип Emptyта типZ struct Empty {}; // empty class struct Z { char c; [[no_unique_address]] Empty e1, e2; }; Мабуть, розмір Zповинен бути хоча б 2тому, що типи e1та e2однакові. Однак мені дуже хочеться мати Zрозміри 1. Це …

1
Чому констатаційна функція дозволяє визначати не визначену поведінку?
В C ++ існує дуже акуратна властивість константних виразів: їх оцінка не може мати визначеної поведінки ( 7.7.4.7 ): Вираз e - основний постійний вираз, якщо тільки оцінка e, дотримуючись правил абстрактної машини ([intro.execution]), не оцінила б одне з наступних: ... операція, яка мала б не визначену поведінку, як зазначено …

2
Чому std :: swap не позначений constexpr перед C ++ 20?
В C ++ 20, std::swap стає constexprфункцією. Я знаю, що стандартна бібліотека дійсно відставала від мови в маркуванні речей constexpr, але до 2017 року <algorithm>була в значній мірі контекспр, як і купа інших речей. І все ж -std::swap не було. Я туманно пам'ятаю, що там був якийсь дивний мовний дефект, …

2
Чи дійсно зберігання std :: chrono :: років принаймні 17 біт?
З cppreference std::chrono::years (since C++20) duration</*signed integer type of at least 17 bits*/, std::ratio<31556952>> Використовуючи libc++це здається , що підкреслює зберігання std::chrono::yearsIS , shortякий підписана 16 біт . std::chrono::years( 30797 ) // yields 32767/01/01 std::chrono::years( 30797 ) + 365d // yields -32768/01/01 apparently UB Чи є друкарська помилка на cppreference …
14 c++  chrono  c++20  libc++ 

1
якщо constexpr - чому відхилена операція повністю перевірена?
Я возився з контестуванням c ++ 20 в GCC 10 і написав цей код #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t> find_if_impl(Predicate&& pred, Tuple&& t) noexcept { constexpr std::size_t I = std::tuple_size_v<std::decay_t<decltype(t)>> - N; if constexpr (N == 0u) { return std::nullopt; …

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