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

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

7
Ідіоматичний спосіб відрізнити два конструктори з нульовим аргументом
У мене такий клас: struct event_counts { uint64_t counts[MAX_COUNTERS]; event_counts() : counts{} {} // more stuff }; Зазвичай я хочу, щоб за замовчуванням (нуль) ініціалізувати countsмасив, як показано. Однак у вибраних місцях, визначених шляхом профілювання, я хотів би придушити ініціалізацію масиву, оскільки я знаю, що масив збирається перезаписати, але компілятор …

2
Підходи до функціонування SFINAE в C ++
Я активно використовую функцію SFINAE в проекті і не впевнений, чи є якісь відмінності між наступними двома підходами (крім стилю): #include <cstdlib> #include <type_traits> #include <iostream> template <class T, class = std::enable_if_t<std::is_same_v<T, int>>> void foo() { std::cout << "method 1" << std::endl; } template <class T, std::enable_if_t<std::is_same_v<T, double>>* = 0> …
40 c++  sfinae 

2
Чому комутатор не оптимізований так само, як ланцюговий, якщо інший в c / c ++?
Наступна реалізація квадрата видає серію операторів cmp / je, як я би сподівався на ланцюжок, якщо заява: int square(int num) { if (num == 0){ return 0; } else if (num == 1){ return 1; } else if (num == 2){ return 4; } else if (num == 3){ return …

4
Мета-програмування шаблонів
Хтось може мені пояснити, чому перший спосіб метапрограмування шаблону збирається нескінченним циклом, а другий працює правильно. #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> struct commondivs<N,N> { static const int val = N; …

2
Чому функція видалення_референції не працює на функції?
Натрапив на щось дивне, коли днями робив якусь метапрограмування шаблонів. Це в основному зводиться до цього твердження не (як я б очікував) ухваленням. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Спочатку я думав, що роблю синтаксичну помилку, визначаючи посилання на функцію, але це твердження проходить, показуючи, що це не так. static_assert(std::is_same_v<void()&, void()&>); Я також спробував …
38 c++  templates  types  c++17 

4
Як порівняти підпис двох функцій?
Чи є спосіб перевірити, чи мають дві функції однаковий підпис? Наприклад: int funA (int a, int b); int funB (int a, int b); float funC (int a, int b); int funD (float a, int b); У цьому прикладі funAі funBє єдиною комбінацією функцій, яку слід повернути true.

2
Як ініціалізувати C ++ 17 векторних пар з додатковим елементом
Як в C ++ 17 як оголосити і ініціалізувати вектор пар (або кортежів) з необов'язковим елементом? std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true}, {2, false}, {3, nullptr}}; У мене є пара, де другий елемент може бути нульовим / необов’язковим.

4
Перевантаження функції за допомогою шаблонів
Я намагаюся визначити функцію за допомогою шаблонів, і я хочу, щоб ім'я типу було або int, або anEnum (конкретна перерахунок, яку я визначив). Я спробував наступне, але не зміг: template <int | anEnum T> // or <int T, anEnum T> or <int, anEnum T> bool isFunction(const T &aVariable){} Що я …

3
Чи приріст покажчика на динамічний масив розміром 0 не визначений?
AFAIK, хоча ми не можемо створити масив статичної пам'яті розміром 0, але ми можемо це зробити з динамічними: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined Як я читав, він pдіє як елемент "минулого кінця". Я можу надрукувати адресу, на яку pвказує. if(p) cout << …

2
Чи законно нового виділення покажчика на функціонування?
Покажчики функцій не є простими покажчиками даних, оскільки вони не можуть бути збережені у покажчику недійсності *. Тим не менш, здається, що я можу зберігати копію вказівника функції в динамічній пам'яті (в gcc і clang), як у наведеному нижче коді. Чи законний такий код відповідно до стандарту C ++, чи, …
33 c++ 


3
C ++ decltype і дужки - чому?
Тема обговорювалася раніше , але це не дублікат. Коли хтось запитує про різницю між decltype(a)і decltype((a)), звичайна відповідь - aце змінна, (a)є виразом. Я вважаю цю відповідь незадовільною. По-перше, aце також вираз. Параметри первинного вираження включають, серед іншого, - (вираз) id-вираз Що ще важливіше, фразування для decltype розглядає круглі дужки …

4
Чому два використання клаузи, що вирішують один і той же тип, у gcc розглядаються як амбіційні
У мене є два базові класи з використанням пропозицій class MultiCmdQueueCallback { using NetworkPacket = Networking::NetworkPacket; .... } class PlcMsgFactoryImplCallback { using NetworkPacket = Networking::NetworkPacket; .... } Потім я оголошую клас class PlcNetwork : public RouterCallback, public PlcMsgFactoryImplCallback, public MultiCmdQueueCallback { private: void sendNetworkPacket(const NetworkPacket &pdu); } компілятор потім позначає …

2
Дивна поведінка з полями класів при додаванні до std :: vector
Я знайшов дуже дивну поведінку (на кланг та GCC) у наступній ситуації. У мене вектор, nodesз одним елементом, екземпляр класу Node. Потім я викликаю функцію, nodes[0]яка додає нове Nodeу вектор. Коли додається новий Вузол, поля виклику об'єкта скидаються! Однак вони, здається, знову повертаються до норми, коли функція закінчена. Я вважаю, …

6
Чи можливо для відсутнього #include зламати програму під час виконання?
Чи є випадок, коли пропущений A #includeпорушить програмне забезпечення під час виконання, тоді як збірка все ще проходить? Іншими словами, чи можливо це? #include "some/code.h" complexLogic(); cleverAlgorithms(); і complexLogic(); cleverAlgorithms(); обидва б будували успішно, але поводилися б інакше?
31 c++ 

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