c++17- все статьи тега
Инициализация QByteArray
Я могу инициализировать QByteArray как: QByteArray m_data; m_data[0] = 0x0c; m_data[1] = 0x06; m_data[2] = 0x04; m_data[3] = 0x04; m_data[4] = 0x02; m_data[5] = 0x00; Но я хотел бы что-то более компактное, например: QByteArray m_data{0x0c, 0x06, 0x04, 0x04, 0x02, 0x00}; К сожалению, эта форма не разрешена: error: could not convert '{12, 6, 4, 4, 2, 0}' from '<brace-enclosed initializer list>' to 'QByteArray' QByteArray m_data{0x0c, 0x06, 0x04, 0x04, 0x02, 0x00}; ...
enum в строку в современном C++11 и C++14 и C++17 и будущее C++с 20
в отличие от всех других подобных вопросов, этот вопрос касается использования новых функций C++. 2008 c есть ли простой способ преобразовать перечисление C++ в строку? 2008 c простой способ использовать переменные перечисления типов в качестве строки в C? 2008 c++ как легко сопоставить перечисления c++ со строками 2008 c++ делает что-то как идентификатор C и строку? 2008 c++ есть ли простой скрипт для преобразования перечисления C++ в струна? 2009 c++ как использовать перечисления в кач ...
Почему GCC предупреждает меня о провале, даже когда я использую [[fallthrough]]?
в следующем фрагменте кода я использую стандартный [[fallthrough]] атрибут из C++1z в документ, что требуется fallthrough: #include <iostream> int main() { switch (0) { case 0: std::cout << "an"; [[fallthrough]] case 1: std::cout << "bn"; break; } } С GCC 7.1, код компилируется без ошибок. Однако компилятор все равно предупреждает меня о провале: warning: this statement may fall through [-Wimplicit-f ...
Почему конструкция std:: optional дороже, чем std:: pair?
рассмотрим эти два подхода, которые могут представлять собой " необязательный int": using std_optional_int = std::optional<int>; using my_optional_int = std::pair<int, bool>; учитывая эти две функции... auto get_std_optional_int() -> std_optional_int { return {42}; } auto get_my_optional() -> my_optional_int { return {42, true}; } ...оба G++ и багажник и clang++ trunk(С -std=c++17 -Ofast -fno-exceptions -fno-rtti) произведите следующую сборку: get_std_optional ...
Как новый цикл 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++
Я сомневаюсь, что это можно сделать переносимо, но есть ли какие-либо решения? Я думаю,что это можно сделать, создав альтернативный стек и сбросив SP, BP и IP при входе в функцию, а также получив выход сохранить IP и восстановить SP+BP. Деструкторы и безопасность исключений кажутся сложными, но разрешимыми. Это было сделано? Это невозможно? ...
Изменены правила для защищенных конструкторов в C++17?
у меня есть этот тест: struct A{ protected: A(){} }; struct B: A{}; struct C: A{ C(){} }; struct D: A{ D() = default; }; int main(){ (void)B{}; (void)C{}; (void)D{}; } и gcc и clang компилируют его в режиме C++11 и C++14. Оба сбоя в режиме C++17: $ clang++ -std=c++17 main.cpp main.cpp:7:10: error: base class 'A' has protected default constructor (void)B{}; ^ main.cpp:1:22: note: declared protected here struct A{ protected: A(){} }; ^ ...
Как эффективно получить "строковое представление" для подстроки " std:: string`
используя http://en.cppreference.com/w/cpp/string/basic_string_view в качестве ссылки, я не вижу способа сделать это более элегантно: std::string s = "hello world!"; std::string_view v = s; v = v.substr(6, 5); // "world" хуже того, наивный подход является ловушкой и оставляет v висячая ссылка на временное: std::string s = "hello world!"; std::string_view v(s.substr(6, 5)); // OOPS! Я помню что-то вроде того, что может быть добавлено в стандартную библиотеку для возврата подстроки в виде пр ...