Запитання з тегом «c++17»

C ++ 17 - назва стандарту C ++, затвердженого в 2017 році. Він спирається на попередній стандарт C ++ 14, покращуючи основну мову та стандартну бібліотеку, додаючи кілька нових мовних функцій.

2
Як отримати розмір файлу в байтах за допомогою C ++ 17
Чи я маю знати підводні камені для конкретних операційних систем? Існує багато дублікатів ( 1 , 2 , 3 , 4 , 5 ) цього питання, але на них відповіли десятки років тому. На сьогодні дуже багато відповідей у ​​багатьох із цих питань є помилковими. Методи з інших (старих QA) …

6
Навіщо використовувати std :: make_unique в C ++ 17?
Наскільки я розумію, C ++ 14 запроваджено std::make_unique, оскільки в результаті невказаного порядку оцінки параметрів це було небезпечно: f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (Пояснення: якщо оцінка спочатку виділяє пам’ять для необробленого вказівника, тоді виклики g()та виняток видаються перед std::unique_ptrпобудовою, тоді пам’ять витікає.) Виклик std::make_uniqueбув способом обмежити порядок дзвінків, роблячи …
96 c++  c++17  unique-ptr 


4
помилка експериментальної :: файлової системи
Я намагаюся використовувати нові можливості c ++ 1z фактично на голові розробки в рамках gcc 6.0. Якщо я спробую цей маленький приклад: #include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { fs::path p1 = "/home/pete/checkit"; std::cout << "p1 = " << p1 << std::endl; } Я отримав: / …
94 c++  gcc  c++17 

3
Коли інформація про тип рухається назад у C ++?
Я щойно спостерігав, як Стефан Т. Лававей виступав на темі CppCon 2018"Відрахування аргументів шаблону класу", де в якийсь момент він випадково каже: У типі C ++ інформація майже ніколи не тече назад ... Мені довелося сказати "майже", тому що є один або два випадки, можливо, більше, але дуже мало . …

1
Як працює гарантоване копіювання?
На засіданні стандартів ISO O ++ в Оулу у 2016 році комісія зі стандартів проголосувала пропозицію під назвою Гарантоване копіювання шляхом спрощених категорій цінності . Як саме працює гарантоване копіювання? Чи охоплює це деякі випадки, коли копіювання elision вже було дозволено, чи потрібні зміни коду, щоб гарантувати копіювання elision?

2
std :: ігнорувати зі структурованими прив'язками?
Прелюдія: std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C ++ 1z введе синтаксис для структурованих прив'язок, що дозволить писати замість int a, b, c; std::tie(a, b, c) = f(); щось на зразок auto [a, b, c] = f(); Однак std::tieтакож дозволено вказати std::ignoreігнорувати певні компоненти, наприклад: std::tie(a, b, …

4
Чи надійні експериментальні особливості сучасного С ++ для довгострокових проектів?
У мене є проект, який в даний час використовує C ++ 11/14, але для цього потрібно щось на зразок std::filesystem, яке доступне лише в C ++ 17, і, отже, у мене немає можливості використовувати його зараз. Однак я бачу, що він доступний у моєму поточному компіляторі як std::experimental::filesystem. Чи є …

1
Що таке посібники з вирахування шаблонів і коли ми повинні ними користуватися?
Стандарт C ++ 17 вводить "посібники з вирахування шаблонів". Я вважаю, що вони мають щось спільне з новим вирахуванням аргументу шаблону для конструкторів, представленим у цій версії стандарту, але я ще не бачив простого пояснення щодо того, для чого вони потрібні, у стилі поширених запитань. Що таке посібники з вирахування …

1
Чому GCC попереджає мене про провал, навіть коли я використовую [[провал]]?
У наступному фрагменті коду я використовую стандартний [[fallthrough]]атрибут із C ++ 1z, щоб задокументувати бажаність проходження: #include <iostream> int main() { switch (0) { case 0: std::cout << "a\n"; [[fallthrough]] case 1: std::cout << "b\n"; break; } } У GCC 7.1 код компілюється без помилок. Однак компілятор все ще попереджає …

3
Чи завжди покажчик із правильною адресою та типом завжди є дійсним покажчиком з C ++ 17?
(Стосовно цього питання та відповіді .) До стандарту C ++ 17 у [basic.compound] / 3 було включено таке речення : Якщо об’єкт типу T знаходиться за адресою A, вказівник типу cv T *, значення якого є адресою A, вказує на цей об’єкт, незалежно від того, як було отримано значення. Але …

6
Ініціалізація змінних у операторі “якщо”
Я читав, що в C ++ 17 ми можемо ініціалізувати змінні в ifтаких операторах if (int length = 2; length == 2) //execute something Замість int length = 2; if (length == 2) //do something Незважаючи на те, що він коротший, він впливає на читабельність коду (особливо для людей, які …
80 c++  c++17 

6
Чи дозволено компілятору оптимізувати локальну мінливу змінну?
Чи дозволено компілятору оптимізувати це (згідно зі стандартом C ++ 17): int fn() { volatile int x = 0; return x; } до цього? int fn() { return 0; } Якщо так, чому? Якщо ні, чому ні? Ось деякі роздуми з цього приводу: поточні компілятори компілюють fn()як локальну змінну, яку …

3
Розуміння std :: hardware_destructive_interference_size та std :: hardware_constructive_interference_size
C ++ 17 додано std::hardware_destructive_interference_sizeтаstd::hardware_constructive_interference_size . По-перше, я думав, що це просто портативний спосіб отримати розмір лінії кешу L1, але це занадто спрощення. Запитання: Як ці константи пов'язані з розміром рядка кешу L1? Чи є хороший приклад, який демонструє випадки їх використання? Обидва визначені static constexpr. Це не проблема, якщо …

3
Як ефективно отримати `string_view` для підрядка` 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)); // …
78 c++  view  c++17  stdstring 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.