c++11- все статьи тега ➜ страница 5
В чем разница между пустым и нулевым std::shared ptr в C++?
The cplusplus.com shared_ptr страница вызывает различие между пустойstd::shared_ptr и nullshared_ptr. The cppreference.com страница явно не вызывает различие, но использует как "пустой", так и сравнение с nullptr в описании std::shared_ptr поведение. есть ли разница между пустым и нулевым shared_ptr? Есть ли какой-либо вариант использования для таких указателей смешанного поведения? Совсем не пустой null shared_ptr смысла? Будет ли когда-нибудь случай в обычном использовании (т. е. если вы яв ...
Что такое std::atomic?
Я понимаю, что std::atomic<> является атомарным объектом. Но атомный до какой степени? В моем понимании операция может быть атомной. Что именно подразумевается под атомизацией объекта? Например, если есть два потока одновременно выполнив следующий код: a = a + 12; тогда вся операция (скажем add_twelve_to(int)) атомный? Или изменения, внесенные в переменную atomic (so operator=())? ...
C++11: Почему переменная std::condition использует std:: unique lock?
Я немного запутался в роли std::unique_lock при работе с std::condition_variable. Насколько я понял документация,std::unique_lock в основном раздутый замок охранник, с возможностью замены состояния между двумя замками. Я до сих пор использовать pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) для этой цели (я думаю, что это то, что STL использует на posix). Для этого нужен мьютекс, а не замок. какая здесь разница? Тот факт, что std::condition_variable занимается std::unique_lock ...
Как получить идентификатор целочисленного потока в c++11
c++11 имеет возможность получения текущего идентификатора потока, но он не может быть приведен к целочисленному типу: cout<<std::this_thread::get_id()<<endl; выход : 139918771783456 cout<<(uint64_t)std::this_thread::get_id()<<endl; ошибка: недопустимое приведение от типа 'std:: thread:: id 'к типу' uint64_t’ же для других типов: недопустимого приведения типа ‘СТД::резьба::идентификатор’ для типа ‘uint32_t’ Я действительно не хочу делать приведение указателя, чтобы ...
инициализировать вектор с нулями на C++/Си++11
Я знаю, что в C++11 они добавили функцию для инициализации переменной до нуля как таковой double number = {}; // number = 0 int data{}; // data = 0 есть ли подобный способ для инициализации std::vector фиксированной длины для всех нули? ...
Разница между C++11 std:: bind и boost:: bind
есть ли разница между двумя? Или я в безопасности, чтобы заменить каждое вхождение boost::bind by std::bind в моем коде и тем самым убрать зависимость от Boost? ...
Инициализация по умолчанию std:: array?
С C++11 std::array, есть ли у меня гарантия, что синтаксис std::array<T, N> x; по умолчанию-инициализировать все элементы массива ? EDIT: если нет, то есть ли синтаксис, который будет работать на всех массивах (включая массивы нулевого размера) для инициализации всех элементов до их значения по умолчанию? EDIT на cppreference, описание конструктора по умолчанию говорит: (constructor) (implicitly declared) (public member function) default-constructs or copy-constructs every element of ...
Рефакторинг в C++ 11
учитывая новый набор инструментов, предоставленный c++ множеством программистов, направленных на упрощение кода, выразительность, эффективность, просматривайте свой старый код и делайте настройки (некоторые бессмысленные, некоторые успешные) для достижения своих целей. Пытаясь не терять слишком много времени на такие труды и просто делать ненавязчивые и самодостаточные изменения, каковы лучшие практики? позвольте мне вычеркнуть очевидное: использовать авто запустить циклы на основе итератор ...
Где находится замок для std:: atomic?
если структура данных содержит несколько элементов, атомарная версия не может (всегда) быть без блокировки. Мне сказали, что это верно для больших типов, потому что процессор не может атомарно изменить данные без использования какой-то блокировки. например: #include <iostream> #include <atomic> struct foo { double a; double b; }; std::atomic<foo> var; int main() { std::cout << var.is_lock_free() << std::endl; std::cout << sizeof(foo) < ...
Разница между std:: reference wrapper и простым указателем?
зачем нужно иметь std::reference_wrapper? Где его следует использовать? Чем он отличается от простого указателя? Как его производительность сравнивается с простым указателем? ...
Каково время жизни лямбда-выражения C++?
(Я читал, что такое время жизни лямбда-производных неявных функторов в C++? уже и он не отвечает на этот вопрос.) Я понимаю, что синтаксис лямбда-кода C++ - это просто сахар для создания экземпляра анонимного класса с оператором вызова и некоторым состоянием, и я понимаю требования к жизни этого состояния (решается ли вы захватить значение по ссылке.) Но каково время жизни самого лямбда-объекта? В следующем примере это std::function возвращенный экземпляр будет полезен? std::function<int(in ...
Как новый цикл for на основе диапазона в C++17 помогает диапазонам TS?
комитет изменил диапазон на основе цикла for от: C++11: { auto && __range = range_expression ; for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) { range_declaration = *__begin; loop_statement } } на C++17: { auto && __range = range_expression ; auto __begin = begin_expr ; auto __end = end_expr ; for ( ; __begin != __end; ++__begin) { range_declaration = *__begin; l ...
Какие функции C++11 поддерживает Visual Studio 2010?
здесь список для GCC; есть ли аналогичный список для Visual Studio 2010? ...
Расширение пакета вариационных шаблонов
Я пытаюсь изучить вариативные шаблоны и функции. Я не могу понять, почему этот код не компилируется: template<typename T> static void bar(T t) {} template<typename... Args> static void foo2(Args... args) { (bar(args)...); } int main() { foo2(1, 2, 3, "3"); return 0; } когда я компилирую его не удается с ошибкой: ошибка C3520: 'args': пакет параметров должен быть расширен в этом контексте (в функции foo2). ...
Что бы это было " Здравствуй, Мир!"пример для "std:: ref"?
может кто-нибудь дать простой пример, который демонстрирует функциональность std::ref? Я имею в виду пример, в котором используются некоторые другие конструкции (например, кортежи или шаблоны типов данных)только если невозможно объяснить std::ref без них. я нашел два вопроса о std::refздесь и здесь. Но в первом речь идет об ошибке в компиляторе, а во втором-примеры использования std::ref не содержат std::ref и они включают кортежи и шаблоны типов данных, которые делают понимание этих примеров с ...
Изменился ли стандарт C++ в отношении использования неопределенных значений и неопределенного поведения в C++14?
как описано в разделе инициализация влечет за собой преобразование lvalue-to-rvalue? Это int x = x; UB? в стандарте C++ есть удивительный пример в разделе 3.3.2пункт декларации, в котором int инициализируется собственным неопределенным значением: int x = 12; { int x = x; } здесь второй x инициализируется своим собственным (неопределенным) значением. - пример] какой ответ Йоханнеса на этот вопрос указывает на это неопределенное поведение, так как он требует это значение lvalue-на-прав ...
общие ptr и слабые различия ptr
Я читаю книгу Скотта Мейерса " эффективный C++". Было упомянуто, что есть tr1::shared_ptr и tr1::weak_ptr действуют как встроенные указатели, но они отслеживают сколько tr1::shared_ptrs указывает на объект. это называется подсчетом ссылок. Это хорошо работает в предотвращении утечек ресурсов в ациклических структурах данных, но если два или более объектов содержат tr1::shared_ptrs Так что цикл формируется, цикл может держать отсчет ссылок друг друга выше нуля, даже если все внешние указатели ...
Как получить длительность, как int и float Милли секунды?
Я пытаюсь использовать библиотеку chrono для таймеров и длительностей. Я хочу иметь возможность иметь Duration frameStart; ( от начала приложения ) и Duration frameDelta; ( время между кадрами ) мне нужно быть в состоянии получить frameDelta длительность в миллисекундах и секундах с плавающей точкой. как это сделать с новым c++11 <chrono> библиотеки? Я работал над этим и гуглил (информация разрежена ). Код сильно шаблонен и требует специальных приведений и вещей, я не могу выяснить, ка ...
С явно удаленными функциями-членами в C++11 по-прежнему стоит наследовать от некопируемого базового класса?
С явно удаленными функциями-членами в C++11 по-прежнему стоит наследовать от некопируемого базового класса? Я говорю о трюке, когда вы в частном порядке наследуете базовый класс, который имеет частный или удаленный конструктор копирования и назначение копирования (например,boost::noncopyable). являются ли преимущества, выдвинутые в этом вопрос все еще применимо к C++11? Я не понимаю, почему некоторые люди утверждают, что это легче сделайте класс не копируемым в C++11. В C++03: private: ...
Как скомпилировать C++ с поддержкой C++11 в терминале Mac
Я хотел скомпилировать исходный код C++11 в терминале Mac, но не удалось. Я пытался g++ -std=c++11,g++ -std=c++0x,g++ -std=gnu++11 и g++ -std=gnu++0x но ничего не получалось. Терминал всегда читается unrecognized command line option. Однако,g++ -std=gnu и такие вещи работали нормально (конечно, исходный код C++11 не мог пройти). какой параметр следует использовать для включения поддержки C++11? кстати, инструмент командной строки, который я использую, установлен в Xcode, и я уверен, что они об ...