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

C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.

3
Инициализируйте несколько постоянных членов класса, используя один вызов функции C ++
Если у меня есть две разные постоянные переменные-члены, которые нужно инициализировать на основе одного и того же вызова функции, есть ли способ сделать это, не вызывая функцию дважды? Например, класс дроби, где числитель и знаменатель постоянны. int gcd(int a, int b); // Greatest Common Divisor class Fraction { public: // …

5
Шаблон дружественной строки к числовому в C ++
В стандартной библиотеке C ++ есть функции для преобразования из строковых в числовые типы: stoi stol stoll stoul stoull stof stod stold но я считаю утомительным использовать их в шаблоне кода. Почему нет шаблонных функций что-то вроде: template<typename T> T sto(...) преобразовать строки в числовые типы? Я не вижу никаких …

2
Почему «использование системы»; не считается плохой практикой?
У меня есть опыт работы с C ++, и я полностью понимаю и согласен с ответами на этот вопрос: почему «используется пространство имен std;» считается плохой практикой? Поэтому я удивлен тем, что, имея некоторый опыт работы с C # сейчас, я вижу здесь совершенно противоположное: using Some.Namespace;буквально используется везде. Всякий …

2
Алгоритм нахождения решения для A xor X = B + X
По заданным целым числам A и B найдите целое число X так, чтобы: A, B <2 * 1e18 A xor X = B + X Я очень сомневаюсь, что это уравнение можно решить с помощью математики. Это проблема кодирования, с которой я столкнулся 3 года назад, и даже сейчас я …
46 c++  xor 

3
std :: vector (ab) использует автоматическое хранение
Рассмотрим следующий фрагмент: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } Очевидно, что это приведет к сбою на большинстве платформ, поскольку размер стека по умолчанию обычно составляет менее 20 МБ. Теперь рассмотрим следующий код: #include <array> #include <vector> int main() { using huge_type = std::array<char, …

3
Как я могу получить глубину многомерного std :: vector во время компиляции?
У меня есть функция, которая принимает многомерный std::vectorи требует, чтобы глубина (или количество измерений) передавалась как параметр шаблона. Вместо жесткого кодирования этого значения я хотел бы написать constexprфункцию, которая будет принимать std::vectorи возвращать глубину как unsigned integerзначение. Например: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } …

2
Почему оператор! = Удален в C ++ 20 для многих стандартных типов библиотек?
Согласно cppreference , std::type_info::operator!=удаляется с C ++ 20, однако, по- std::type_info::operator==видимому, остается. В чем причина? Я мог бы согласиться с тем, что сравнивать неравенство бессмысленно, но тогда сравнивать равенство было бы так же бессмысленно, не так ли? Точно так же operator!=из многих других стандартных типов библиотек, включая контейнеры, такие как …

5
Можно ли предотвратить пропуск элементов инициализации агрегата?
У меня есть структура со многими членами одного типа, как это struct VariablePointers { VariablePtr active; VariablePtr wasactive; VariablePtr filename; }; Проблема в том, что если я забуду инициализировать один из членов структуры (например wasactive), например: VariablePointers{activePtr, filename} Компилятор не будет жаловаться на это, но у меня будет один объект, …


7
Идиоматический способ различения двух нулевых конструкторов
У меня есть такой класс: struct event_counts { uint64_t counts[MAX_COUNTERS]; event_counts() : counts{} {} // more stuff }; Обычно я хочу по умолчанию (ноль) инициализировать countsмассив, как показано. Однако в выбранных местах, определенных профилированием, я хотел бы подавить инициализацию массива, потому что я знаю, что массив собирается быть перезаписан, но …

2
Подходы к функции SFINAE в C ++
Я активно использую функцию SFINAE в проекте и не уверен, есть ли какие-либо различия между следующими двумя подходами (кроме стиля): #include <cstdlib> #include <type_traits> #include <iostream> template <class T, class = std::enable_if_t<std::is_same_v<T, int>>> void foo() { std::cout << "method 1" << std::endl; } template <class T, std::enable_if_t<std::is_same_v<T, double>>* = 0> …
40 c++  sfinae 

2
Почему переключатель не оптимизирован так же, как цепочка, если еще в c / c ++?
Следующая реализация square производит серию операторов cmp / je, как я и ожидал от цепочки if: int square(int num) { if (num == 0){ return 0; } else if (num == 1){ return 1; } else if (num == 2){ return 4; } else if (num == 3){ return 9; …

2
Почему remove_reference не работает с функциями?
Сталкивался с чем-то странным, когда делал шаблонное метапрограммирование на днях. Это в основном сводится к тому, что утверждение не (как я и ожидал) не прошло. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Сначала я думал, что допустил синтаксическую ошибку при определении ссылки на функцию, но это утверждение проходит, показывая, что это не так. static_assert(std::is_same_v<void()&, void()&>); …
38 c++  templates  types  c++17 

4
Шаблон метапрограммирования
Может кто-нибудь объяснить мне, почему первый способ метапрограммирования шаблона идет в бесконечный цикл, а второй работает правильно. #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> struct commondivs<N,N> { static const int val = …

4
Как сравнить сигнатуру двух функций?
Есть ли способ проверить, имеют ли две функции одинаковую подпись? Например: int funA (int a, int b); int funB (int a, int b); float funC (int a, int b); int funD (float a, int b); В этом примере funAи funBесть единственная комбинация функций, которую следует вернуть true.

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