c++11- все статьи тега ➜ страница 2
Анонимные классы перечисления
Можно ли написать анонимный класс enum и затем сравнить, что он содержит? Напр.. enum class { APPLE, BANANA } fruitType; // ... if (fruitType == fruitType::APPLE) // ... ...
Lambda capture by value mutable не работает с const &?
Рассмотрим следующее: void test( const int &value ) { auto testConstRefMutableCopy = [value] () mutable { value = 2; // compile error: Cannot assign to a variable captured by copy in a non-mutable lambda }; int valueCopy = value; auto testCopyMutableCopy = [valueCopy] () mutable { valueCopy = 2; // compiles OK }; } Почему первая версия является ошибкой компиляции, когда я объявил лямбду изменяемой и захватил value по значению (которое, как я думал, сде ...
C++ lambda с захватом в качестве указателя функции
Я играл с лямбдами C++ и их неявным преобразованием в указатели функций. Мой начальный пример был использовать их в качестве обратного вызова для функции ftw. Это работает, как и ожидалось. #include <ftw.h> #include <iostream> using namespace std; int main() { auto callback = [](const char *fpath, const struct stat *sb, int typeflag) -> int { cout << fpath << endl; return 0; }; int ret = ftw("/etc", callback, 1); return ret; ...
разница между атомным bool стандарта и атомным флагом
Я не знал о переменных std::atomic, но знал о переменных std::mutex (странно!) обеспечивается стандартом; однако одна вещь привлекла мое внимание: есть два, казалось бы, одинаковых (для меня) атомарных типа, предоставляемых стандартом, перечисленных ниже: std::atomic<bool> тип std::atomic_flag тип Также упоминается на примере std::atomic_flag type - Std:: atomic_flag-это атомарный булев тип. В отличие от всех специализаций std:: atomic, он гарантированно будет без блокировки ...
Понимание std:: atomic:: compare exchange weak() в C++11
bool compare_exchange_weak (T& expected, T val, ..); compare_exchange_weak() является одним из примитивов compare-exchange, представленных в C++11. Это ... слабый в том смысле, что он возвращает false, даже если значение объекта равно expected. Это связано с тем, что ложная неудача на некоторых платформах, где для его реализации используется последовательность инструкций (а не одна, как на x86). На таких платформах переключение контекста, перезагрузка того же адреса (или строки кэша) друг ...
На основе диапазона для цикла и std:: vector.push back () сбой программы
#include <iostream> #include <vector> int main() { std::vector<int> vec; for (int i = 0; i < 42; ++i) { vec.push_back(i); vec.push_back(-i); } for (int x: vec) { for (int y: vec) { vec.push_back(x + y); } } for (int x: vec) { std::cout << x << "n"; } } Что вызывает сбой этого кода? Я попытался скомпилировать его с помощью-fsanitize=address, получил ==9347==ERROR: AddressSanitizer: ...
Как создать новое значение и назначить частному уникальному ptr в конструкторе класса?
Как создать новый и присвоить значение частному unique_ptr в конструкторе класса? Tyvm:^) Keith Мои лучшие усилия: #include <iostream> #include <memory> class A { public: A() {}; A(int); void print(); private: std::unique_ptr<int> int_ptr_; }; A::A(int a) { int_ptr_ = new int(a); } void A::print() { std::cout << *int_ptr_ << std::endl; } int main() { A a(10); a.print(); std::cout << std::endl; } Результат компилятора: ...
Что такое лямбда-выражения в C++11?
Что такое лямбда-выражения в C++11? Когда я буду его использовать? Какой класс проблем они решают, что было невозможно до их введения? несколько примеров, и варианты использования были бы полезны. ...
Что означает T&& (двойной амперсанд) в C++11?
Я изучал некоторые из новых функций C++11, и я заметил, что это двойной амперсанд в объявлении переменных, например T&& var. для начала, как называется этот зверь? Я хотел бы, чтобы Google позволил нам искать знаки препинания, как это. что это в смысле? на первый взгляд, это похоже на двойную ссылку (например, двойные указатели C-стиля T** var), но мне трудно думать об использовании дело за этим. ...
отодвинуть против установки обратно
Я немного запутался относительно разницы между push_back и emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); как есть push_back перегрузка принимая ссылку rvalue я не совсем понимаю, что цель emplace_back будет? ...
Закончились ли дни передачи const std::string & в качестве параметра?
Я слышал недавний разговор Херба Саттера, который предположил, что причины пройти std::vector и std::string by const & в основном ушли. Он предположил, что теперь предпочтительнее написать такую функцию, как следующая: std::string do_something ( std::string inval ) { std::string return_val; // ... do stuff ... return return_val; } Я понимаю, что return_val будет rvalue в точке, возвращаемой функцией, и поэтому может быть возвращено с помощью семантики перемещения, которые очень ...
Что такое std:: move (), и когда его следует использовать?
что это? что он делает? , когда его следует использовать? хорошие ссылки. ...
Итератор правила о признании недействительными
каковы правила недействительности итератора для контейнеров C++? желательно в формате сводного списка. (Примечание:это должно быть запись в C++ FAQ Stack Overflow. Если вы хотите критиковать идею предоставления FAQ в этой форме, то публикация на meta, которая начала все это было бы место, чтобы сделать это. Ответы на этот вопрос отслеживаются в в C++ чат, где идея FAQ началась в во-первых, поэтому ваш ответ, скорее всего, будет прочитан теми, кто придумал эту идею.) ...
Как передать уникальный аргумент ptr конструктору или функции?
Я новичок в перемещении семантики в C++11, и я не очень хорошо знаю, как обрабатывать unique_ptr параметры в конструкторах или функции. Рассмотрим этот класс, ссылающийся на себя: #include <memory> class Base { public: typedef unique_ptr<Base> UPtr; Base(){} Base(Base::UPtr n):next(std::move(n)){} virtual ~Base(){} void setNext(Base::UPtr n) { next = std::move(n); } protected : Base::UPtr next; }; это, как я должен написать функции ...
Правило трех становится правилом пяти с C++11?
Итак, после просмотра эта замечательная лекция на ссылках rvalue я думал, что каждый класс выиграет от такого "конструктора перемещения",template<class T> MyClass(T&& other) edit и, конечно, "оператор присваивания перемещения",template<class T> MyClass& operator=(T&& other) Как указывает Филипп в своем ответе, если он динамически выделяет члены или вообще хранит указатели. Так же, как и ты должны есть copy-ctor, оператор присваивания и деструктор, если точки, упом ...
Как активировать C++ 11 в CMake?
когда я пытаюсь запустить CMake сгенерированный makefile для компиляции моей программы, я получаю ошибку, что диапазон, основанный на циклах, не поддерживается в режиме C++ 98. Я пробовал добавлять add_definitions(-std=c++0x) мой CMakeLists.txt, но это не помогло. Я тоже это пробовал: if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-std=gnu++0x) endif() когда я делаю g++ --version, Я: g++ (Ubuntu / Linaro 4.6.1-9ubuntu3) 4.6.1 я тоже пробовал SET(CMAKE_CXX_FLAGS "-std=c++0x"), ...
C++11 обратный диапазон на основе for-loop
есть ли адаптер контейнера, который изменил бы направление итераторов, чтобы я мог перебирать контейнер в обратном порядке с помощью цикла for-loop на основе диапазона? с явными итераторами я бы преобразовал это: for (auto i = c.begin(); i != c.end(); ++i) { ... в: for (auto i = c.rbegin(); i != c.rend(); ++i) { ... Я хочу преобразовать это: for (auto& i: c) { ... для этого: for (auto& i: std::magic_reverse_adapter(c)) { ... есть ли такая вещь или я должен написать ее сам? ...
std:: уникально замок или std:: предохранитель замка?
у меня есть два варианта использования. A. Я хочу синхронизировать доступ двумя потоками к очереди. B. Я хочу синхронизировать доступ двумя потоками к очереди и использовать переменную условия, потому что один из потоков будет ждать содержимого, которое будет храниться в очереди другим потоком. для случая использования я вижу пример кода с использованием std::lock_guard<>. Для случая использования B я вижу пример кода с помощью std::unique_lock<>. Что такое разница между ними ...
Почему в C++ нет сборщика мусора?
Я не задаю этот вопрос из-за заслуг сбора мусора в первую очередь. Моя главная причина спросить об этом заключается в том, что я знаю, что Бьярне Страуструп сказал, что C++ будет иметь сборщик мусора в какой-то момент времени. с учетом сказанного, почему он не был добавлен? Уже есть некоторые сборщики мусора для C++. Это просто одна из тех вещей типа" легче сказать, чем сделать"? Или есть другие причины, по которым он не был добавлен (и не будет добавлен в C++11)? перекрестные ссылки: сб ...
"распаковка" кортежа для вызова соответствующего указателя функции
Я пытаюсь хранить в std::tuple различное число значений, которые позже будут использоваться в качестве аргументов для вызова указателя функции, который соответствует сохраненным типам. Я создал упрощенный пример, показывающий проблему, которую я изо всех сил пытаюсь решить: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename ...Args> struct sav ...