Вопросы по теме 'c++20'

Можно ли гарантировать, что функция constexpr вызывается не более одного раза во время компиляции?
Как следует из заголовка: возможно ли обеспечить вызов функции constexpr не более одного раза во время компиляции? Это явно невозможно, если функция не constepxr; Я мог бы написать функцию, которая будет вызываться всякий раз, когда я нажимаю...
511 просмотров
schedule 19.12.2023

std::is_constant_evaluated поведение
GCC9 уже реализует std::is_constant_evaluated . Я немного поиграл с ним и понял, что это довольно сложно. Вот мой тест: constexpr int Fn1() { if constexpr (std::is_constant_evaluated()) return 0; else return 1; } constexpr int...
1720 просмотров
schedule 28.11.2022

Мотивация определения концепции отношения в C++20
Как онлайн-черновик C++ , так и cppreference определяет стандартную Relation концепцию следующим образом: template <class R, class T, class U> concept Relation = std::Predicate<R, T, T> && std::Predicate<R, U, U>...
219 просмотров

Постоянные целые числа и постоянная оценка
Рассмотрим следующую программу: #include <iostream> #include <type_traits> constexpr int f() { if (std::is_constant_evaluated()) return -1; else return 1; } int main() { int const i = f(); std::cout << i; } Он...
683 просмотров
schedule 05.12.2022

Попытка использовать оператор космического корабля в производных классах
Я пытаюсь использовать оператор космического корабля в базовом классе, поэтому я бы определил весь оператор компилятором. (источник: https://devblogs.microsoft.com/cppblog/simplify-your-code-with-rocket-science-c20s-spaceship-operator/ ) Но я...
117 просмотров
schedule 23.05.2024

Проверьте, есть ли в классе возможно перегруженный оператор вызова функции
Мне интересно, можно ли реализовать трейт в C++20 , чтобы проверить, является ли тип T таким, что он имеет, возможно, перегруженный/возможно шаблонный оператор вызова функции: operator() . // Declaration template <class T> struct...
84 просмотров

std::accumulate версия C++20
Я пытаюсь понять этот код, но не могу понять, почему эта версия for (; first != last; ++first) init = std::move(init) + *first; быстрее, чем это for (; first != last; ++first) init += *first; Я взял их из std::accumulate....
300 просмотров
schedule 09.11.2023

std::ranges::elements_view для пользовательских данных, похожих на кортежи
У меня есть вариант использования, который можно сократить до: #include <vector> #include <ranges> #include <tuple> struct TDat { double x, y; template <std::size_t I> friend double &get(TDat &Dat) { if...
92 просмотров
schedule 07.11.2023

можно ли теперь использовать std::string как константу времени компиляции?
Прежде всего, я предполагаю, что в C++20 у нас есть constexpr std::string в C++20. Если это так, то должна быть возможность написать что-то вроде: struct MyType { constexpr MyType(int n_):n{n_}{}; int n; }; template < auto a > struct...
99 просмотров
schedule 30.11.2023

С++ 20 явно использует оператор равенства по умолчанию
Я пытаюсь понять новые операторы сравнения по умолчанию, представленные в С++ 20. Моя проблема связана с тем, что оператор сравнения с явным значением по умолчанию определяется неявно. Следующий пример кода иллюстрирует вопрос: #include...
189 просмотров

Шаблон функции принимает и возвращает разные лямбды
У меня есть функция GetThing следующим образом: auto GetThing(size_t index, auto&& l1) { return l1; } auto GetThing(size_t index, auto&& l1, auto&&... rest) { if (index == 0) return l1; return...
313 просмотров
schedule 16.11.2023

Концепция шаблона C ++, требующая определенного размера пакета параметров
Изменить: эта функция должна проверять типы один за другим и возвращать obj любого, который удовлетворяет условию или nullptr. template <typename... Args, typename = std::enable_if_t<(sizeof...(Args) == 0)>()> std::nullptr_t f() {...
474 просмотров
schedule 08.04.2024

С++ 20 представлений с пакетом параметров или списком инициализаторов
Я хочу передать функции переменное количество аргументов, а затем получить представление о них. Мне нужно применить несколько функций к каждому из них. Я пытался заставить это работать как с пакетами параметров, так и со списками инициализаторов....
102 просмотров
schedule 14.11.2022

Импорт модуля Visual Studio C++ 20 .h&.cpp lib
lib1 имеет два файла математика.ч inline void hello(); и math.cpp #include <iostream> #include "math.h" void hello() { std::cout << "hello from math"; } lib2 — это библиотека модулей С++ 2a:...
256 просмотров
schedule 26.04.2024

Почему std :: range :: view_interface использует CRTP
Согласно cppreference, шаблон вспомогательного класса для определения представлений view_interface с использованием любопытно повторяющегося шаблоны шаблонов (CRTP). Какая философия дизайна стоит за ними? Есть ли существенное преимущество...
139 просмотров
schedule 27.11.2022

Вероятно, дефект в формулировке рабочего проекта C++ (правила ранжирования целочисленного преобразования)
Я обнаружил возможное противоречие в рабочем проекте стандарта C++ . Сначала я излагаю факты, а в конце — мой вопрос. Когда установлены целочисленные рейтинги конверсии , [conv.rank]/1.1 говорит Никакие два целочисленных типа со знаком...
82 просмотров
schedule 16.04.2024

Как поддерживать адаптеры диапазона в пользовательском контейнере?
Я создал пользовательский контейнер с именем goldbox , который содержит только арифметические типы, а также реализовал функции-члены begin и end для перебора элементов. Мой полный исходный код: #include <algorithm> #include...
111 просмотров
schedule 02.12.2022

Можно ли построить `std::span` из представления в C++20?
Этот пример программы не компилируется, потому что transform_view нельзя преобразовать в std::span : class Foo { private: std::vector<std::string> strings = { "a", "b", "c" }; public:...
73 просмотров
schedule 01.06.2024

Концепция проверки наличия шаблона вложенного класса
Предположим, я хочу написать: template<class T> concept WithNestedTemplate = ...; struct F { template<class> using nested = int; }; static_assert(WithNestedTemplate<F>); static_assert(!WithNestedTemplate<int>); То есть...
60 просмотров
schedule 06.05.2024

Могу ли я заставить `std::ranges::views::elements` работать с диапазоном моего типа
Рассмотрим тип Point со значениями x , y и z . Если у меня есть диапазон объектов Point , например std::vector<Point> , что мне нужно добавить к Point , чтобы он работал с адаптером диапазона std::ranges::views::elements ? Намерение...
66 просмотров
schedule 13.12.2023