Articles of c ++ 11

c ++, std :: atomic, что такое std :: memory_order и как их использовать?

Может ли кто-нибудь объяснить, что такое std :: memory_order на простом английском языке, и как использовать их с std :: atomic ? Здесь я нашел ссылку и несколько примеров, но не понимаю. http://en.cppreference.com/w/cpp/atomic/memory_order Благодарю.

Ошибка компиляции при использовании члена пользовательского литерала

При компиляции этого кода (без заголовка) template struct Temperature { T temp; explicit Temperature(T t) : temp(t) {} }; Temperature operator “” _f (long double t) { return Temperature((t – 32) / 1.8); } int main() { auto t = 100.0_f; t.temp; 100.0_f.temp; // ERROR AT THIS LINE return 0; } Компиляторы (как g ++ […]

Как фиксировать 0-2 группы в регулярных выражениях C ++ и печатать их?

Редактировать 3 Я пошел на хороший подход к парсингам, поскольку я застрял в регулярном выражении. Это оказалось не так уж плохо, так как содержимое файла можно было четко обозначить, а маркеры можно разобрать в цикле с очень простым конечным автоматом. Те, кто хочет проверить, есть fragment кода, который делает это с помощью iteratorов range-for, ifstream […]

атомные операции для shared_ptr в C ++ 11

Прочитав проект c ++ 11 n3242 , раздел 20.7.2.5, похоже, что у нас есть атомарные операции с shared_ptr, что позволяет нам делать блокировку на сложной структуре, не беспокоясь о утечке GC / памяти. Однако я не смог использовать его в GCC-4.7.0. Я просто протестировал следующую программу #include #include #include struct X { int x; double […]

Является ли static_cast (…) время компиляции или время выполнения?

Является static_cast(…) что-то, что делается во время компиляции или во время выполнения? Я искал googled, но у меня разные ответы. Кроме того, dynamic_cast(…) является, очевидно, временем выполнения, но как насчет reinterpret_cast(…) ?

Указание функции-члена как обратного вызова в C ++ 11

У меня есть следующее: typedef std::function SomethingCoolCb; class ClassA { public: void OnSomethingCool(const SomethingCoolCb& cb) { _cb = cb; } private: SomethingCoolCb _cb; }; class ClassB { public: ClassB(); bool Juggle(const std::string& arg); private: ClassA _obj; }; и я хочу указать функцию classа ClassB :: Juggle () как обратный вызов ClassB :: _ obj. Будет […]

неверная инициализация неконстантной ссылки из rvalue

Поэтому у меня есть следующая функция: void scan(std::istream& is, Handler& h); Я хочу назвать это по-разному, например: scan(std::cin, Handler()); scan(std::ifstream(“myfile”), myhandler); Компилятор жалуется на std::ifstream(“myfile”) и Handler() на то, что rvalues ​​передаются как неконстантные ссылки, поэтому жалоба является законной, но что я могу сделать? Ни один из параметров функции не может быть const ( istream […]

О streamовой безопасности weak_ptr

std::shared_ptr g_s = std::make_shared(1); void f1() { std::shared_ptrl_s1 = g_s; // read g_s } void f2() { std::shared_ptr l_s2 = std::make_shared(3); std::thread th(f1); th.detach(); g_s = l_s2; // write g_s } Что касается вышеприведенного кода, я знаю, что разные streamи, читающие и записывающие один и тот же shared_ptr приводят к условиям гонки. Но как насчет […]

Использование enums в качестве постоянного выражения. Какой компилятор прав?

Следующий код использует enum member m как константное выражение, то есть в качестве параметра шаблона. Код компилируется под gcc, но не под clang ( live demo ). Кланг говорит: «ошибка: аргумент шаблона непигового типа не является постоянным выражением». Проблема может быть решена путем замены строки // 1 на A<tst ::m> a . Поэтому мой вопрос […]

Как скомпилировать Boost со старым std из C ++? (Особенно C ++ 03)

Я работаю в проекте, зависящем от Boost ( http://kratos-wiki.cimne.upc.edu/index.php/Main_Page ), этот проект в настоящее время поддерживает только C ++ 03. С последним обновлением gcc ++ (v.5) C ++ 11 стал стандартным std, технически я решил проблему, изменяющую добавление CXX_FLAGS: -std = C ++ 03 Проблема связана с библиотекой Boost, которую я не могу скомпилировать с […]