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

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

3
Як я можу створити спосіб декартового продукту списків типів у C ++?
Пояснення самостійно. В основному, скажіть, у мене такі типи списків: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Вони можуть бути різною кількістю списків типів. Як отримати підбірку декартового продукту? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, somestructB, …

4
Чи є void * function () вказівник на функцію або функція, що повертає порожнечу *?
Мене плутає сенс void *function(). Це вказівник на функцію чи функція, що повертається void*? Я завжди використовував це в структурах даних як рекурсивну функцію, що повертає вказівник, але коли я побачив код у багатопотоковому читанні ( pthread), є однакове оголошення функції. Тепер я розгублений, в чому різниця між ними.


4
Контейнер STL із специфічним типом як загальний аргумент
Чи я можу зробити функцію, яка приймає контейнер із певним типом (скажімо std::string) як параметр void foo(const std::container<std::string> &cont) { for(std::string val: cont) { std::cout << val << std::endl; } } і називати його для кожного типу контейнера stl як вхідного? як вище? std::set<std::string> strset; std::vector<std::string> strvec; std::list<std::string> strlist; foo(strset); …

2
Як перевірити, чи визначені цілі числа з фіксованою шириною
У C ++ цілі числа з фіксованою шириною визначаються як необов'язкові , але я не можу знайти рекомендований спосіб перевірити, чи вони фактично визначені. Який би був портативний спосіб перевірити, чи є цілі числа фіксованої ширини?
25 c++  c++11  types  stdint  cstdint 

2
Чи робить оператор std :: unordered_map [] нульову ініціалізацію для неіснуючого ключа?
За даними cppreference.com, std::map::operator[]для неіснуючого значення робиться нульова ініціалізація. Однак той самий сайт не згадує нульову ініціалізацію для std::unordered_map::operator[], за винятком того, що він має приклад, який спирається на це. Звичайно, це лише довідковий сайт, а не стандарт. Отже, чи нижче код нормально чи ні? #include <unordered_map> int main() { …

2
Позначені ініціалізатори в C ++ 20
У мене запитання щодо однієї з функцій c ++ 20, призначених ініціалізаторами (більше інформації про цю функцію тут ) #include <iostream> constexpr unsigned DEFAULT_SALARY {10000}; struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { std::cout << std::boolalpha << …

3
Чи дозволено компілятору постійно складати локальну мінливу?
Розглянемо цей простий код: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Ви бачите, що gccні clangоптимізуйте потенційний дзвінок g. Це правильно в моєму розумінні: абстрактна машина передбачає, що volatileзмінні можуть змінюватися в будь-який момент (через те, що, наприклад, апаратне відображення), тому постійне …


3
яка корисна скринька для явного (bool)
C ++ 20 вводить явний (bool), який умовно вибирає під час компіляції, чи буде конструктор явним чи ні. Нижче наведено приклад, який я знайшов тут . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename T> explicit(!std::is_integral_v<T>) foo(T) {} }; foo a = 123; …
24 c++  c++20  explicit 

1
Чому `decltype (static_cast <T> (...))` не завжди є `T`?
Для наступного коду передається все, крім останнього твердження: template&lt;typename T&gt; constexpr void assert_static_cast_identity() { using T_cast = decltype(static_cast&lt;T&gt;(std::declval&lt;T&gt;())); static_assert(std::is_same_v&lt;T_cast, T&gt;); } int main() { assert_static_cast_identity&lt;int&gt;(); assert_static_cast_identity&lt;int&amp;&gt;(); assert_static_cast_identity&lt;int&amp;&amp;&gt;(); // assert_static_cast_identity&lt;int(int)&gt;(); // illegal cast assert_static_cast_identity&lt;int (&amp;)(int)&gt;(); assert_static_cast_identity&lt;int (&amp;&amp;)(int)&gt;(); // static assert fails } Чому це останнє твердження провалюється, а static_cast&lt;T&gt;не завжди повертається …
24 c++  static-cast 

3
C ++ 20 понять: яку спеціалізацію шаблону обирають, коли аргумент шаблону кваліфікується для кількох понять?
Подано: #include &lt;concepts&gt; #include &lt;iostream&gt; template&lt;class T&gt; struct wrapper; template&lt;std::signed_integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "signed_integral" &lt;&lt; std::endl; } }; template&lt;std::integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "integral" &lt;&lt; std::endl; } }; int main() { wrapper&lt;int&gt; w; …

1
Чому розмір класу в c ++ залежить від публічного / приватного статусу членів даних?
Як я знаю, розмір класу в c ++ залежить від наведених нижче факторів - Розмір усіх нестатичних членів даних. Порядок членів даних. Якщо включення байтів увімкнено чи ні Розмір його безпосереднього базового класу. Існування віртуальних функцій. Режим успадкування (віртуальне успадкування). Тепер я створив 2 класи, як показано нижче - class …

2
Чому ця функція шаблону не веде себе так, як очікувалося?
Я читав про функції шаблону і заплутався у цій проблемі: #include &lt;iostream&gt; void f(int) { std::cout &lt;&lt; "f(int)\n"; } template&lt;typename T&gt; void g(T val) { std::cout &lt;&lt; typeid(val).name() &lt;&lt; " "; f(val); } void f(double) { std::cout &lt;&lt; "f(double)\n"; } template void g&lt;double&gt;(double); int main() { f(1.0); // f(double) f(1); …

3
Різниця в поведінці змінної функції лямбда від посилання на глобальну змінну
Я виявив, що результати компіляторів відрізняються, якщо я використовую лямбда, щоб захопити посилання на глобальну змінну із змінним ключовим словом, а потім змінити значення у функції лямбда. #include &lt;stdio.h&gt; #include &lt;functional&gt; int n = 100; std::function&lt;int()&gt; f() { int &amp;m = n; return [m] () mutable -&gt; int { m …

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