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

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

2
Какой из <случайных> механизмов случайных чисел следует использовать на практике? станд :: mt19937?
Предположим, вы хотите использовать средства C ++ &lt;random&gt;в практической программе (для некоторого определения «практический» - ограничения здесь являются частью этого вопроса). У вас есть код примерно так: int main(int argc, char **argv) { int seed = get_user_provided_seed_value(argc, argv); if (seed == 0) seed = std::random_device()(); ENGINE g(seed); // TODO: proper …
21 c++  c++11  random 

4
Неявное преобразование не допускается при возврате
#include &lt;optional&gt; bool f() { std::optional&lt;int&gt; opt; return opt; } Не компилируется: 'return': cannot convert from 'std::optional&lt;int&gt;' to 'bool' Консультационная справка Я бы подумал найти объяснение, но я прочитал его, как должно быть в порядке. Неявные преобразования выполняются всякий раз, когда выражение некоторого типа T1 используется в контексте, которое не …

5
Установить операцию в c ++ (обновить существующее значение)
Вот мой код: while (it!=s.end()) //here 's' is a set of stl and 'it' is iterator of set { *it=*it-sub; //'sub' is an int value it++; } Я не могу обновить значение, установленное итератором. Я хочу вычесть целочисленное значение 'sub' из всех элементов множества. Может ли кто-нибудь помочь мне, где …
21 c++ 

1
Почему GCC агрегирует инициализацию массива в первую очередь с нулями, включая ненулевые элементы?
Почему gcc заполняет весь массив нулями вместо оставшихся 96 целых чисел? Все ненулевые инициализаторы находятся в начале массива. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to materialize a[] in memory instead of …

4
Как вызвать правильный конструктор типа шаблона?
В следующем коде, как я могу сделать так, чтобы закомментированная строка работала так же, как строка чуть выше? Я хотел бы сделать его универсальным кодом, который вызывает подходящий конструктор шаблона Type. #include &lt;string&gt; #include &lt;iostream&gt; template &lt;typename Type&gt; struct Class { Type data; Class(Type data) : data(data) { } }; …


1
Почему {} в качестве аргумента функции не приводит к двусмысленности?
Рассмотрим этот код: #include &lt;vector&gt; #include &lt;iostream&gt; enum class A { X, Y }; struct Test { Test(const std::vector&lt;double&gt;&amp;, const std::vector&lt;int&gt;&amp; = {}, A = A::X) { std::cout &lt;&lt; "vector overload" &lt;&lt; std::endl; } Test(const std::vector&lt;double&gt;&amp;, int, A = A::X) { std::cout &lt;&lt; "int overload" &lt;&lt; std::endl; } }; int …

1
Предоставляет ли порождение потока гарантии порядка памяти самостоятельно?
Я хочу сделать примерно это: Начальная тема: записать некоторые значения в глобальные переменные (они никогда не будут записаны снова) Это могут быть данные среднего размера (массивы, строки и т. Д.). Не может быть просто сделано std::atomic&lt;&gt;. порождают другие темы Другие темы: читать глобальное состояние делать работу и т. д. Теперь …

3
Разделить заданный тип std :: option по заданным критериям
Как по заданному варианту using V = std::variant&lt;bool, char, std::string, int, float, double, std::vector&lt;int&gt;&gt;; объявить два варианта типа using V1 = std::variant&lt;bool, char, int, float, double&gt;; using V2 = std::variant&lt;std::string, std::vector&lt;int&gt;&gt;; где V1включает в себя все арифметические типы из Vи V2включает в себя все неарифметические типы из V? V может …
20 c++  c++17  std-variant 

1
Автоматический возврат типа шаблона и неоднозначность
У меня перегружена функция шаблона: template&lt;typename T1, typename T2&gt; auto overMax(T1 a, T2 b) { std::cout &lt;&lt; __FUNCSIG__ &lt;&lt; std::endl; return b &lt; a ? a : b; } template&lt;typename RT, typename T1, typename T2&gt; RT overMax(T1 a, T2 b) { std::cout &lt;&lt; __FUNCSIG__ &lt;&lt; std::endl; return b &lt; a …

4
Допустимо ли использовать std :: transform с std :: back_inserter?
Cppreference имеет этот пример кода для std::transform: std::vector&lt;std::size_t&gt; ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -&gt; std::size_t { return c; }); Но это также говорит: std::transformне гарантирует применение в порядке unary_opили binary_op. Чтобы применить функцию к последовательности по порядку или применить функцию, которая изменяет элементы последовательности, используйте std::for_each. Предположительно, это …

2
Безопасно ли называть размещение новым для `this` для тривиального объекта?
Я знаю, что этот вопрос задавался уже несколько раз, но я не мог найти ответ для этого конкретного случая. Допустим, у меня есть тривиальный класс, который не владеет никакими ресурсами и имеет пустой деструктор и конструктор по умолчанию. У него есть несколько переменных-членов с инициализацией в классе; ни один из …

3
Неопределенное поведение в векторе приведения векторов
Почему этот код записывает неопределенное количество, казалось бы, неинициализированных целых чисел? #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { for (int i : vector&lt;vector&lt;int&gt;&gt;{{77, 777, 7777}}[0]) cout &lt;&lt; i &lt;&lt; ' '; } Я ожидал, что результат будет 77 777 7777. Этот код должен быть неопределенным?
19 c++ 

2
целое число -> правила преобразования указателя
Рассмотрим следующий код. void f(double p) {} void f(double* p) {} int main() { f(1-1); return 0; } MSVC 2017 не компилирует это. Он показывает, что существует неоднозначный перегруженный вызов, 1-1такой же, как 0и, следовательно, может быть преобразован в double*. Другие трюки, вроде 0x0, 0Lили static_cast&lt;int&gt;(0), тоже не работают. Даже …
19 c++  visual-c++  types 

3
C ++ Threads внутри для цикла печати неправильные значения
Я пытаюсь понять многопоточность в c ++, но я застрял в этой проблеме: если я запускаю потоки в цикле for, они печатают неправильные значения. Это код: #include &lt;iostream&gt; #include &lt;list&gt; #include &lt;thread&gt; void print_id(int id){ printf("Hello from thread %d\n", id); } int main() { int n=5; std::list&lt;std::thread&gt; threads={}; for(int i=0; …

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