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

22
Отличие поведения изменяемого захвата лямбда-функции от ссылки на глобальную переменную

Я обнаружил, что результаты в разных компиляторах различны, если я использую лямбду для захвата ссылки на глобальную переменную с изменяемым ключевым словом, а затем изменяю значение в лямбда-функции. #include <stdio.h> #include <functional> int n = 100; std::function<int()> f() {...

21
Почему 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...

21
Как вызвать правильный конструктор типа шаблона?

В следующем коде, как я могу сделать так, чтобы закомментированная строка работала так же, как строка чуть выше? Я хотел бы сделать его универсальным кодом, который вызывает подходящий конструктор шаблона Type. #include <string> #include <iostream> template <typename Type> struct...

21
Установить операцию в 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
Какой из <случайных> механизмов случайных чисел следует использовать на практике? станд :: mt19937?

Предположим, вы хотите использовать средства C ++ <random>в практической программе (для некоторого определения «практический» - ограничения здесь являются частью этого вопроса). У вас есть код примерно так: int main(int argc, char **argv) { int seed = get_user_provided_seed_value(argc, argv);...

21
Неявное преобразование не допускается при возврате

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

20
Безопасно ли называть размещение новым для `this` для тривиального объекта?

Я знаю, что этот вопрос задавался уже несколько раз, но я не мог найти ответ для этого конкретного случая. Допустим, у меня есть тривиальный класс, который не владеет никакими ресурсами и имеет пустой деструктор и конструктор по умолчанию. У него есть несколько переменных-членов с инициализацией в...

20
Предоставляет ли порождение потока гарантии порядка памяти самостоятельно?

Я хочу сделать примерно это: Начальная тема: записать некоторые значения в глобальные переменные (они никогда не будут записаны снова) Это могут быть данные среднего размера (массивы, строки и т. Д.). Не может быть просто сделано std::atomic<>. порождают другие темы Другие темы: читать...

19
Является ли значение указателя `this` постоянным в течение всего времени существования объекта?

thisГарантируется ли значение указателя постоянным в течение жизни определенного объекта? Я не могу представить себе случай, когда это изменится, но не знаю, не пропустил ли я...

19
C ++ Threads внутри для цикла печати неправильные значения

Я пытаюсь понять многопоточность в c ++, но я застрял в этой проблеме: если я запускаю потоки в цикле for, они печатают неправильные значения. Это код: #include <iostream> #include <list> #include <thread> void print_id(int id){ printf("Hello from thread %d\n", id); } int main() {...

19
целое число -> правила преобразования указателя

Рассмотрим следующий код. void f(double p) {} void f(double* p) {} int main() { f(1-1); return 0; } MSVC 2017 не компилирует это. Он показывает, что существует неоднозначный перегруженный вызов, 1-1такой же, как 0и, следовательно, может быть преобразован в double*. Другие трюки, вроде 0x0, 0Lили...