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

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

1
Будь-які проблеми, які замінюють глобальний const char [] на constexpr string_view?
Наша команда працює з базою кодів C ++ для 10+ років і нещодавно перейшла на компілятор C ++ 17. Тож ми шукаємо шляхи модернізації нашого коду. У конференції на YouTube я почув пропозицію замінити const char*глобальні рядки на constexpr string_view. Оскільки const char*в нашому коді є досить багато таких глобальних …

1
std :: пара <авто, авто> тип повернення
Я грав autoу std::pair. У наведеному нижче коді функція fповинна повертати а std::pairтипів, які залежать від параметра шаблону. Робочий приклад: ПРИКЛАД 1 template &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; // …

1
Як компілятори c ++ знаходять зовнішню змінну?
Я складаю цю програму за допомогою g ++ та clang ++. Є різниця: g ++ друкує 1, але clang ++ друкує 2. Здається, що g ++: зовнішня змінна визначається в найкоротшій області. clang ++: зовнішня змінна визначається в найкоротшій глобальній області. Чи має специфікація C ++ якусь специфікацію щодо цього? …

1
Чи є різниця двох екземплярів constexpr __func__ покажчиків досі constexpr?
Чи дійсно це C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC та MSVC вважають, що це нормально, Кланг вважає, що це не так: Compiler Explorer . Усі компілятори погоджуються, що це нормально: Провідник компілятора . int main() { constexpr auto p = …

1
Це помилка в std :: gcd?
Я натрапив на таку поведінку, std::gcdщо мені виявилося несподіваним: #include &lt;iostream&gt; #include &lt;numeric&gt; int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type&lt;decltype(a), decltype(b)&gt;::type; C ca = std::abs(a); C cb = b; std::cout &lt;&lt; a &lt;&lt; …

5
Як зробити згруповану чи парну складку пакета параметрів?
template&lt;class Msg, class... Args&gt; std::wstring descf(Msg, Args&amp;&amp;... args) { std::wostringstream woss; owss &lt;&lt; Msg &lt;&lt; ". " &lt;&lt; ... &lt;&lt; " " &lt;&lt; args &lt;&lt; ": '" &lt;&lt; args &lt;&lt; "' ";//not legal at all //or owss &lt;&lt; Msg &lt;&lt; ". " &lt;&lt; args[0] &lt;&lt; ": '" &lt;&lt; args[1] &lt;&lt; …

2
Чи дозволяється GCC9 уникати безцінного стану std :: variant?
Нещодавно я спостерігав за обговоренням Reddit, що призвело до хорошого порівняння std::visitоптимізації між компіляторами. Я помітив таке: https://godbolt.org/z/D2Q5ED І GCC9, і Clang9 (я думаю, вони поділяють один і той же stdlib) не генерують код для перевірки та викидання безцінного винятку, коли всі типи відповідають деяким умовам. Це призводить до кращого …

1
Чому std :: swap не працює на елементах вектор <bool> під Clang / Win?
У мене такий код: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } Аргументи про розумність vector&lt;bool&gt;убік, це справно працювало на: Кланг для Mac Visual Studio для Windows GCC для Linux Потім я спробував побудувати його з Clang у Windows і отримав таку помилку (скорочена): error: …

1
Чи може конструктор std :: vector range викликати явні перетворення?
Чи добре сформована наступна програма? #include &lt;vector&gt; struct A { explicit A(int) {} }; int main() { std::vector&lt;int&gt; vi = {1, 2, 3, 4, 5}; std::vector&lt;A&gt; va(vi.begin(), vi.end()); } Відповідно до C ++ 17 [послідовності.рекмтс], вимога до X u(i, j); де Xконтейнер послідовності, це: Tповинні бути EmplaceConstructibleв Xс *i. Однак …
14 c++  c++17 

3
Перевантажуйте лямбда-функцію
Як перевантажити просту функцію локальної лямбда? SSE вихідної проблеми: #include &lt;iostream&gt; #include &lt;map&gt; void read() { static std::string line; std::getline(std::cin, line); auto translate = [](int idx) { constexpr static int table[8]{ 7,6,5,4,3,2,1,0 }; return table[idx]; }; auto translate = [](char c) { std::map&lt;char, int&gt; table{ {'a', 0}, {'b', 1}, {'c', …

1
Як працює впровадження c ++ nullptr?
Мені цікаво знати, як nullptrпрацює. Стандарти N4659 і N4849 кажуть: він повинен мати тип std::nullptr_t; ви не можете прийняти його адресу; його можна безпосередньо перетворити на вказівник і вказівник на член; sizeof(std::nullptr_t) == sizeof(void*); його перетворення в boolє false; його значення може бути перетворене на інтегральний тип однаково (void*)0, але …

2
якщо constexpr із static_assert в лямбда, який компілятор є правильним?
Коли ми хочемо використовувати a static_assertв a, if constexprми повинні зробити умову залежною від певного параметра шаблону. Цікаво, що gcc та clang не погоджуються, коли код загорнутий у лямбда. Наступний код компілюється з gcc, але clang викликає ствердження, навіть якщо це if constexprне може бути правдою. #include &lt;utility&gt; template&lt;typename T&gt; …

1
Чому типи виразів змінювались у C ++ між версіями?
Я намагаюся зрозуміти типи виразів C ++ і чим більше я читаю, тим я був більш розгубленим, оскільки мені здається, що проект C ++ дуже важкий для засвоєння, і тому віддаю перевагу іншим ресурсам, але вони або суперечать один одному, або не враховують, що формулювання та визначення між версіями C …
13 c++  c++11  c++14  c++17  c++20 

1
Амбітний оператор в gcc
Я зробив шаблон функції для друку деяких контейнерів stl #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; template &lt;template &lt;typename, typename&gt; class C, typename T, typename A&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const C&lt;T, A&gt;&amp; container) { for (auto&amp; elem : container) { os &lt;&lt; elem &lt;&lt; " "; } return os; } int …
13 c++  c++17 

1
Можлива невизначена поведінка в примітивній реалізації static_vector
tl; dr: Я думаю, що мій static_vector має невизначену поведінку, але я не можу його знайти. Ця проблема стосується Microsoft Visual C ++ 17. У мене є така проста і незавершена реалізація static_vector, тобто вектор з фіксованою ємністю, який можна виділити стеком. Це програма C ++ 17, використовуючи std :: …

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