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

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

2
Чи можливо об'єднати два рядки типу `const char *` під час компіляції?
Очевидно, ми можемо об'єднати два рядкові літерали у constexprфункцію, а як щодо об'єднання літерального рядка з рядком, поверненим іншою constexprфункцією, як у наведеному нижче коді? template <class T> constexpr const char * get_arithmetic_size() { switch (sizeof(T)) { case 1: return "1"; case 2: return "2"; case 4: return "4"; case …
12 c++  c++17 

1
Чи гарантовано незаймана лямбда буде порожньою за стандартом?
Я шукаю спосіб ідентифікувати порожні (без захоплення) лямбда від інших лямбда в функції шаблону. Зараз я використовую C ++ 17, але мені цікаво і відповідей на C ++ 20. Мій код виглядає приблизно так: template<typename T> auto func(T lambda) { // The aguments of the lambdas are unknown if constexpr …
12 c++  lambda  c++17  c++20 

1
Сучасний підхід до створення std :: вектор виділяє вирівняну пам'ять
Наступне питання пов'язане, однак відповіді на старі, і коментар від користувача Marc Glisse передбачає , що є нові підходи , починаючи з C ++ 17 до вирішення цієї проблеми , які не можуть бути адекватно обговорені. Я намагаюся вирівняти пам'ять, що працює належним чином для SIMD, але все ще маю …

1
Некваліфікований sort () - чому він компілюється, коли використовується на std :: vector, а не на std :: array, і який компілятор є правильним?
При дзвінку std::sort()на std::array: #include <vector> #include <array> #include <algorithm> int main() { std::vector<int> foo{4, 1, 2, 3}; sort(begin(foo), end(foo)); std::array<int, 4> foo2{4, 1, 2, 3}; sort(begin(foo2), end(foo2)); } І gcc, і clang повертають помилку на сортування в std::array- clang помилка: використання незадекларованого ідентифікатора 'сортування'; ви мали на увазі 'std …
11 c++  c++17 

1
Чи може бути змінена вбудована змінна після ініціалізації в C ++ 17?
Мій сценарій такий (він працював у кланге, але не в gcc) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp: (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); Проблема полягає в тому, що вбудована змінна показувала 0 в тих місцях, де я очікувала 28, оскільки вона була …
11 c++  visual-c++  dll  clang  c++17 

6
Невинний діапазон на основі циклу не працює
Далі не компілюється: #include <iostream> int main() { int a{},b{},c{},d{}; for (auto& s : {a, b, c, d}) { s = 1; } std::cout << a << std::endl; return 0; } Спробуйте це на Godbolt Помилка компілятора: error: assignment of read-only reference 's' Тепер у моєму фактичному випадку список складається …

2
Скидання слабкого_птр впливає на спільний_птр?
Я не дуже звик користуватися weak_ptrі зіткнувся з досить заплутаною ситуацією. Я використовую Intel XE 2019 Composer update 5 ( пакет 2019.5.281 ) у поєднанні з Visual Studio 2019 ver. 16.2.5 . Я компілюю в 64-розрядні. Я використовую стандартний C ++ 17 . Ось код мого рішення з шипом: #include …

3
Чи можу я використовувати std :: transform на місці з паралельною політикою виконання?
Якщо я не помиляюсь, я можу змусити std::transformвиконати на місці , використовуючи той самий діапазон, що ітератор вводу та виводу. Припустимо, у мене є якийсь std::vectorпредмет vec, тоді я б писав std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op) використовуючи відповідну одинарну операцію unary_op. Використовуючи стандарт C ++ 17, я хотів би виконати перетворення паралельно, вставивши std::execution::parтуди …

1
Проблема в GCC / C ++ 17 з класом шаблону шаблонів
Розглянемо 2 наступні перевантаження template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } Перший працює для звичайних занять, а другий - для шаблонів, які не є інстанційними. Наприклад: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 Тепер розглянемо наступну функцію …
10 c++  templates  gcc  clang  c++17 

2
Вирахування аргументу шаблону для аргументу типу функції
Розглянемо наступну програму. #include <iostream> template <typename T> void f( void ( *fn )( T ) ) { fn( 42 ); } void g( int x ) { std::cout << "g( " << x << " );\n"; } int main() { f( g ); } Програма успішно збирається, і її …

5
Чому я не можу отримати індекс варіанту і використовувати його для отримання його вмісту?
Я намагаюся отримати доступ до вмісту варіанту. Я не знаю, що там, але, на щастя, варіант є. Тому я подумав, що просто запитаю варіант, на якому індексі він знаходиться, а потім використаю цей індекс для std::getйого вмісту. Але це не складається: #include <variant> int main() { std::variant<int, float, char> var …
10 c++  c++17  variant 

2
Коли вам потрібен нульовий завершений рядок у сценарії лише для читання?
Я граю з std::string_viewбібліотекою, і роздумував над зміною кодової бази, над якою працюю, щоб std::string_viewякомога більше використовувати . Однак у багатьох темах, які я прочитав на тему, коли і де використовувати std::string_viewзамість цього const std::string &. Я бачив багато відповідей, які говорять: "Коли вам не потрібна нульова завершена рядок". Отож, …

2
Як схилити копію при ланцюжку?
Я створюю клас ланцюгового типу, наприклад маленький приклад нижче. Здається, що при ланцюжку функцій-членів викликається конструктор копій. Чи є спосіб позбутися виклику конструктора копій? У моєму прикладі іграшок нижче, очевидно, що я маю справу лише з тимчасовими, і тому "повинен" (можливо, не за стандартами, але логічно) бути елісією. Другим кращим …
10 c++  c++14  c++17 

2
Чи існує спосіб створити потоковий рядок з string_view без копіювання даних?
Я думаю, що це досить пряме питання. Я спеціально хотів би використовувати std::get_time, але для цього потрібен якийсь потік. Я передаю дані у "А" string_viewі хотів би уникати їх копіювання просто для розбору дати.

2
Що гарантується C ++ std :: atomic на рівні програміста?
Я прослухав і прочитав декілька статей, бесід та запитань про поточний потік std::atomic, і хотів би бути впевненим, що я це добре зрозумів. Оскільки я все ще трохи заплутаний у кеш-рядку запису видимості через можливі затримки протоколів когерентності кеш-пам'яті MESI (або похідних), зберігання буферів, недійсних черг тощо. Я прочитав, що …

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