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

C ++ - мова програмування загального призначення. Спочатку він був розроблений як розширення до C і має подібний синтаксис, але зараз це зовсім інша мова. Використовуйте цей тег для запитань про код (який потрібно) зібрати за допомогою компілятора C ++. Використовуйте тег, що стосується версії, для питань, пов’язаних із конкретною стандартною редакцією [C ++ 11], [C ++ 14], [C ++ 17] або [C ++ 20] тощо.

1
'auto' як заповнення аргументу шаблону для параметра функції
C ++ 20 дозволяє використовувати autoдля типу параметра параметр. Чи дозволяє це також використовувати autoяк заповнювач аргументу шаблону (не схожий, але в дусі шаблону <a +> шаблону C ++ 17) ) для типу параметра функції? Отже, наступний код, попередньо C ++ 20: template<typename First, typename Second> void printPair(const std::pair<First, Second>& …
22 c++  templates  auto  c++20 

1
Використання змінної у власному ініціалізаторі
[basic.scope.pdecl] / 1 стандартного проекту C ++ 20 мав наступний (ненормативний) приклад у примітці (часткова цитата до об'єднання запиту 3580 , див. відповідь на це запитання): unsigned char x = x; [...] x ініціалізується із власним (невизначеним) значенням. Чи насправді це чітко визначена поведінка в С ++ 20? Зазвичай самоініціалізація …

6
Ініціалізація змінної невідомого типу через перевантажені конструктори в C ++
Виходячи з фона в основному пітона, я дещо боровся з роботою з типами в C ++. Я намагаюся ініціалізувати змінну класу за допомогою одного з декількох перевантажених конструкторів, які приймають різні типи як параметри. Я прочитав, що за допомогою autoключового слова можна використовувати автоматичне оголошення змінної, однак у моєму випадку …

3
Чи зберігається делетер shared_ptr в пам'яті, виділений спеціальним розподільником?
Скажіть, у мене є shared_ptrспеціальний розподільник і користувацький делетер. Я не можу знайти нічого, що відповідає стандарту, який би говорив про те, де слід зберігати делетер: він не говорить про те, що користувацький розподільник буде використовуватися для пам'яті делетера, і не говорить про те, що його не буде. Це не …

2
Чи є тип POD точно таким же, як тривіальний, стандартний тип макета?
У C ++ 20 поняття POD є застарілим, нібито тому, що це безглузда складна риса тривіальності та стандартного макета. Однак визначення POD у проекті С ++ 20 не є точно "і тривіальним, і стандартним макетом"; це насправді: Клас POD - це клас, який є і тривіальним класом, і класом стандартного …


4
Неявне перетворення заборонено при поверненні
#include <optional> bool f() { std::optional<int> opt; return opt; } Не компілюється: 'return': cannot convert from 'std::optional<int>' to 'bool' Посилання на консультації, я б подумав знайти пояснення, але я прочитав це як слід. Неявні перетворення виконуються щоразу, коли вираз якогось типу T1 використовується в контексті, який не приймає цей тип, …

2
Який із двигунів випадкових чисел <випадкових> насправді слід використовувати на практиці? std :: mt19937?
Припустимо, ви хочете використовувати засоби C ++ &lt;random&gt;у практичній програмі (для деякого визначення поняття "практичний" - обмеження тут є частиною цього питання). У вас приблизно такий код: int main(int argc, char **argv) { int seed = get_user_provided_seed_value(argc, argv); if (seed == 0) seed = std::random_device()(); ENGINE g(seed); // TODO: proper …
21 c++  c++11  random 

4
Як викликати правильний конструктор типу шаблону?
У наступному коді, як я можу змусити коментований рядок працювати так само, як і рядок прямо над ним? Я хотів би зробити це загальним кодом, який викликає відповідний конструктор шаблону Type. #include &lt;string&gt; #include &lt;iostream&gt; template &lt;typename Type&gt; struct Class { Type data; Class(Type data) : data(data) { } }; …

1
Чому ініціалізація масиву GCC у масиві спочатку заповнює всю нуль, включаючи ненульові елементи?
Чому gcc заповнює весь масив нулями замість лише 96 цілих чисел? Ненульові ініціалізатори знаходяться на початку масиву. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to materialize a[] in memory instead of optimizing …

5
Встановити операцію в c ++ (оновити існуюче значення)
Ось мій код: while (it!=s.end()) //here 's' is a set of stl and 'it' is iterator of set { *it=*it-sub; //'sub' is an int value it++; } Я не можу оновити значення, встановлене ітератором. Я хочу відняти ціле значення 'sub' з усіх елементів набору. Чи може хто-небудь допомогти мені, де …
21 c++ 


1
Чи нерестовинна нитка забезпечує гарантії порядку пам’яті самостійно?
Я хочу зробити приблизно це: Початкова нитка: запишіть деякі значення у глобальну вару (вони більше ніколи не будуть записані) Це можуть бути помірно великі дані (масиви, рядки тощо). Неможливо просто зробити std::atomic&lt;&gt;. нерест інших ниток Інші теми: читати глобальну державу робити роботу тощо. Тепер я знаю, що можу передати аргументи …

3
Розділити заданий тип std ::: за заданими критеріями
Як за заданим типом варіанту using V = std::variant&lt;bool, char, std::string, int, float, double, std::vector&lt;int&gt;&gt;; оголосити два варіанти варіантів using V1 = std::variant&lt;bool, char, int, float, double&gt;; using V2 = std::variant&lt;std::string, std::vector&lt;int&gt;&gt;; де V1включає всі типи арифметики з Vі V2включає в себе всі неарифметичні типи з V? V може бути …
20 c++  c++17  std-variant 

1
Чому {} як аргумент функції не призводить до неоднозначності?
Розглянемо цей код: #include &lt;vector&gt; #include &lt;iostream&gt; enum class A { X, Y }; struct Test { Test(const std::vector&lt;double&gt;&amp;, const std::vector&lt;int&gt;&amp; = {}, A = A::X) { std::cout &lt;&lt; "vector overload" &lt;&lt; std::endl; } Test(const std::vector&lt;double&gt;&amp;, int, A = A::X) { std::cout &lt;&lt; "int overload" &lt;&lt; std::endl; } }; int …

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