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

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

1
Класс не может получить доступ к своему собственному статическому методу constexpr - ошибка Clang?
Этот код не компилируется в Clang (6,7,8,9, транк), но прекрасно компилируется в GCC (7.1, 8.1, 9.1): template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } else { …

1
Почему в C ++ отличается static_cast <unsigned> от отрицательных чисел, если число постоянное или нет
Какие правила С ++ означают, что равно равно ложно ? Данный: float f {-1.0}; bool equal = (static_cast&lt;unsigned&gt;(f) == static_cast&lt;unsigned&gt;(-1.0)); Например, https://godbolt.org/z/fcmx2P #include &lt;iostream&gt; int main() { float f {-1.0}; const float cf {-1.0}; std::cout &lt;&lt; std::hex; std::cout &lt;&lt; " f" &lt;&lt; "=" &lt;&lt; static_cast&lt;unsigned&gt;(f) &lt;&lt; '\n'; std::cout &lt;&lt; "cf" …
28 c++  casting 

2
Почему мой класс не конструируемый по умолчанию?
У меня есть эти классы: #include &lt;type_traits&gt; template &lt;typename T&gt; class A { public: static_assert(std::is_default_constructible_v&lt;T&gt;); }; struct B { struct C { int i = 0; }; A&lt;C&gt; a_m; }; int main() { A&lt;B::C&gt; a; } При компиляции a_mне является конструктивным по умолчанию, но aесть. При переходе Cна: struct C …
28 c++ 

3
Почему выбрана эта перегрузка оператора преобразования?
Рассмотрим следующий код . struct any { template &lt;typename T&gt; operator T &amp;&amp;() const; template &lt;typename T&gt; operator T &amp;() const; }; int main() { int a = any{}; } Здесь второй оператор преобразования выбирается разрешением перегрузки. Почему? Насколько я понимаю, два оператора выводятся operator int &amp;&amp;() constи operator int …

2
Когда «this» захвачено лямбдой, нужно ли его использовать явно?
Примеры, которые я обнаружил, что захват thisв лямбде использует это явно; например: capturecomplete = [this](){this-&gt;calstage1done();}; Но кажется, что это также возможно использовать неявно; например: capturecomplete = [this](){calstage1done();}; Я проверил это в g ++, и это скомпилировано. Это стандарт C ++? (и если да, то какая версия), или это какая-то форма …

2
Почему групповое суммирование медленнее с отсортированными группами, чем с несортированными группами?
У меня есть 2 столбца целых чисел с разделителями табуляции, первый из которых является случайным целым числом, второй - целым числом, идентифицирующим группу, которая может быть сгенерирована этой программой. ( generate_groups.cc) #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; int main(int argc, char* argv[]) { int num_values = atoi(argv[1]); int num_groups = …
27 c++  performance 

3
Как я могу предотвратить угадывание C ++ второго аргумента шаблона?
Я использую библиотеку C ++ ( strf ), которая где-то внутри имеет следующий код: namespace strf { template &lt;typename ForwardIt&gt; inline auto range(ForwardIt begin, ForwardIt end) { /* ... */ } template &lt;typename Range, typename CharT&gt; inline auto range(const Range&amp; range, const CharT* sep) { /* ... */ } } …

3
Можно ли вернуть значение аргумента по умолчанию с помощью константной ссылки?
Можно ли вернуть значение аргумента по умолчанию с помощью константной ссылки, как в следующих примерах: https://coliru.stacked-crooked.com/a/ff76e060a007723b #include &lt;string&gt; const std::string&amp; foo(const std::string&amp; s = std::string("")) { return s; } int main() { const std::string&amp; s1 = foo(); std::string s2 = foo(); const std::string&amp; s3 = foo("s"); std::string s4 = foo("s"); …

2
Список инициализаторов внутри std :: pair
Этот код: #include &lt;iostream&gt; #include &lt;string&gt; std::pair&lt;std::initializer_list&lt;std::string&gt;, int&gt; groups{ { "A", "B" }, 0 }; int main() { for (const auto&amp; i : groups.first) { std::cout &lt;&lt; i &lt;&lt; '\n'; } return 0; } компилируется, но возвращает segfault. Почему? Протестировано на gcc 8.3.0 и на онлайн-компиляторах.
26 c++  std  std-pair 

4
Является ли void * function () указателем на функцию или функцию, возвращающую void *?
Я запутался в значении void *function(). Это указатель на функцию или возвращаемую функцию void*? Я всегда использовал его в структурах данных как рекурсивную функцию, возвращающую указатель, но когда я увидел код в многопоточности ( pthread), было одно и то же объявление функции. Теперь я запутался в чем разница между ними.

3
Как я могу создать способ декартово произведение списков типов в C ++?
Самоочевидно. В основном, скажем, у меня есть списки типов, например, так: using type_list_1 = type_list&lt;int, somestructA&gt;; using type_list_2 = type_list&lt;somestructB&gt;; using type_list_3 = type_list&lt;double, short&gt;; Они могут быть различными числами списков типов. Как я могу получить список картезианского продукта? result = type_list&lt; type_list&lt;int, somestructB, double&gt;, type_list&lt;int, somestructB, short&gt;, type_list&lt;somestructA, somestructB, …


4
Контейнер STL с определенным типом в качестве универсального аргумента
Есть ли способ, которым я могу сделать функцию, которая принимает контейнер с определенным типом (скажем, std::stringв качестве параметра) void foo(const std::container&lt;std::string&gt; &amp;cont) { for(std::string val: cont) { std::cout &lt;&lt; val &lt;&lt; std::endl; } } и вызвать его для каждого типа контейнера STL в качестве ввода? как выше? std::set&lt;std::string&gt; strset; std::vector&lt;std::string&gt; …

2
Как проверить, определены ли целые числа фиксированной ширины
В C ++ целые числа фиксированной ширины определены как необязательные , но я не могу найти рекомендуемый способ проверить, действительно ли они определены. Что бы было портативным способом проверить, доступны ли целые числа фиксированной ширины?
25 c++  c++11  types  stdint  cstdint 

2
Оператор std :: unordered_map [] выполняет нулевую инициализацию для несуществующего ключа?
Согласно cppreference.com, std::map::operator[]для несуществующего значения выполняется нулевая инициализация. Однако на том же сайте не упоминается нулевая инициализация, за std::unordered_map::operator[]исключением того, что у него есть пример, который опирается на это. Конечно это просто ссылочный сайт, а не стандартный. Итак, приведенный ниже код в порядке или нет? #include &lt;unordered_map&gt; int main() { …

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