Вопросы по теме '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 просмотров
schedule
19.10.2022
Постоянные целые числа и постоянная оценка
Рассмотрим следующую программу:
#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 просмотров
schedule
30.09.2022
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 просмотров
schedule
04.03.2024
Шаблон функции принимает и возвращает разные лямбды
У меня есть функция 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