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

26
Как я могу создать способ декартово произведение списков типов в C ++?

Самоочевидно. В основном, скажем, у меня есть списки типов, например, так: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Они могут быть различными числами списков типов. Как я могу...

26
Как я могу предотвратить угадывание C ++ второго аргумента шаблона?

Я использую библиотеку C ++ ( strf ), которая где-то внутри имеет следующий код: namespace strf { template <typename ForwardIt> inline auto range(ForwardIt begin, ForwardIt end) { /* ... */ } template <typename Range, typename CharT> inline auto range(const Range& range, const...

25
Разрешено ли компилятору постоянно сворачивать локальную переменную?

Рассмотрим этот простой код: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Вы можете видеть , что ни gccни clangоптимизируют из потенциального вызова g. В моем понимании это правильно: абстрактная машина должна предполагать, что volatileпеременные могут...

25
Оператор std :: unordered_map [] выполняет нулевую инициализацию для несуществующего ключа?

Согласно cppreference.com, std::map::operator[]для несуществующего значения выполняется нулевая инициализация. Однако на том же сайте не упоминается нулевая инициализация, за std::unordered_map::operator[]исключением того, что у него есть пример, который опирается на это. Конечно это просто...

25
Как проверить, определены ли целые числа фиксированной ширины

В C ++ целые числа фиксированной ширины определены как необязательные , но я не могу найти рекомендуемый способ проверить, действительно ли они определены. Что бы было портативным способом проверить, доступны ли целые числа фиксированной...

25
Контейнер STL с определенным типом в качестве универсального аргумента

Есть ли способ, которым я могу сделать функцию, которая принимает контейнер с определенным типом (скажем, std::stringв качестве параметра) void foo(const std::container<std::string> &cont) { for(std::string val: cont) { std::cout << val << std::endl; } } и вызвать его для...

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

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

23
Почему размер класса в c ++ зависит от публичного / частного статуса членов данных?

Из того, что я знаю, размер класса в C ++ зависит от следующих факторов: Размер всех нестатических элементов данных. Порядок данных членов. Если заполнение байтов включено или нет. Размер его непосредственного базового класса. Существование виртуальных функций. Режим наследования (виртуальное...

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
Является ли тип POD в точности эквивалентным тривиальному типу стандартной компоновки?

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

22
Хранитель shared_ptr хранится в памяти, выделенной пользовательским распределителем?

Скажем, у меня есть shared_ptrпользовательский распределитель и пользовательский удалитель. Я не могу найти в стандарте ничего, что говорит о том, где должен храниться удалитель: он не говорит, что пользовательский распределитель будет использоваться для памяти удалителя, и не говорит, что этого не...

22
Инициализация переменной неизвестного типа через перегруженные конструкторы в C ++

Исходя из опыта работы с Python, я немного боролся с работой с типами в C ++. Я пытаюсь инициализировать переменную класса через один из нескольких перегруженных конструкторов, которые принимают разные типы в качестве параметров. Я прочитал, что использование autoключевого слова может быть...

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

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

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

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