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

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

1
Чому ж названі зовнішні локальні змінні в різних блоках отримують різні зв’язки між компіляторами в c ++?
Поки я лише перевіряв, які зв’язки надаються зовнішнім локальним змінним, я виявив, що між компіляторами поводиться дещо інша поведінка наприклад, якщо я перевірив код нижче, як ви бачите в змінній коментарів vars мають різні зв'язки // foo.cpp int var = 10; // external linkage // main.cpp #include <iostream> static int …
12 c++  g++  clang++  extern  linkage 

1
Чи потрібна `рівність_порівнянний_з`, вимагає "загальної_посилання"?
Концепціяequality_­comparable_with<T, U> покликана заявити , що об'єкти типу Tі Uможуть бути порівняні рівні один одному, і якщо вони є, то це має очікуваний сенс. Це добре. Однак це поняття також вимагає common_reference_t<T&, U&>існування. Основним поштовхом до common_referenceта його супутньої функціональності, здається, є можливість ввімкнути проксі-ітератори , мати місце для представлення …

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

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 ++ 20 визначення поза класу в шаблоновому класі
До C ++ 20 стандарту C ++, коли ми хотіли визначити позакласного оператора, який використовує деякі приватні члени шаблонного класу, ми будемо використовувати конструкцію, подібну до цього: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename T> class Foo { public: constexpr …
12 c++  templates  c++20 

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 

2
Чому тут змінна enum - релевантна?
Приклад: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } Я отримую таку помилку, коли компілюю це: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned …

1
Як менеджери пакунків Linux оброблять модулі C ++ 20?
Зараз ми в 2020 році, і C ++ 20 приходить разом із довгоочікуваною функцією модулів C ++. Але переглянувши кілька розмов про CppCon, я виявив, що модулі C ++ знаходяться в дивному місці, особливо для менеджерів пакетів Linux (pacman, apt, emerge тощо). З того, що я дізнався, є модулі C …


1
Неможливо повністю кваліфікувати ім’я класу в позакласовому деклараторі визначення функції
Ця програма призводить до небажаного розбору жадібності в тупику: struct float4x4 {}; class C { float4x4 M(); }; float4x4 ::C::M() { return float4x4{}; } : 8: 1: помилка: жоден член з ім'ям "C" у "float4x4"; ти мав на увазі просто "С"? float4x4 :: C :: M () ^ ~~~~~~~~~~~ Що …

1
Що запобігає перекриттю сусідніх членів у класах?
Розглянемо наступні три structs: class blub { int i; char c; blub(const blub&) {} }; class blob { char s; blob(const blob&) {} }; struct bla { blub b0; blob b1; }; На типових платформах, де intрозміщено 4 байти, розміри, вирівнювання та загальна заливка 1 є такими: struct size alignment …

2
Передача поняття функції
Оскільки поняття визначені як предикати часу компіляції, чи можливо також реально використовувати ці предикати для алгоритмів часу компіляції? Наприклад, чи можна було б перевірити, чи всі типи в кортежі відповідають поняттю? Наскільки я бачив, неможливо жодним чином передати поняття функції, що призводить мене до використання шаблонів для цих випадків. #include …

5
Ефективна стабільна сума упорядкованих чисел
У мене досить довгий список позитивних чисел з плаваючою комою ( std::vector<float>, розмір ~ 1000). Числа сортуються у порядку зменшення. Якщо я підсумую їх у порядку: for (auto v : vec) { sum += v; } Я думаю, у мене може виникнути проблема чисельної стабільності, оскільки близько до кінця вектора …

2
Ініціалізація вектора атомів
Поміркуйте: void foo() { std::vector<std::atomic<int>> foo(10); ... } Чи вміст foo зараз дійсний? Або мені потрібно явно прокрутити і ініціалізувати їх? Я перевірив Godbolt, і це здається прекрасним, проте стандарт здається дуже заплутаним у цьому питанні. Конструктор std :: vector говорить, що він вставляє вставлені за замовчуванням екземпляри std::atomic<int>, які …
12 c++  vector  atomic 


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