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

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

3
Як уникнути неявних перетворень від цілого числа 0 до вказівника, як елемента вектора
Існує ситуація, коли я хочу зібрати всі назви вузлів шляху до ключа в JSON. Розглянемо умову індексу масиву "0", "1" також дозволено, але легко забути лапки, що призвело б до краху при відхиленні. Тому я хочу відкинути це. Приклад: #include <vector> #include <iostream> int func(const std::vector<const char*>& pin) { return …

7
Стирання () елемента у векторі не працює
У мене вектор. Мені потрібно видалити останні 3 елементи в ньому. Описана ця логіка. Програма збоїв. Що може бути помилкою? vector<float>::iterator d = X.end(); for (size_t i = 1; i < 3; i++) { if (i == 1) X.erase(d); else X.erase(d - i); }
10 c++  vector 

1
Доступ до члена в структурі за допомогою змінної в C ++
У мене є структура з двома членами, наприклад: struct DataSet { int x; int y; }; ..., і мені доводиться отримувати доступ до тих методів, але лише один за одним, наприклад: void foo(StructMember dsm) { // ("StructMember" does not exist) DataSet ds; ds.x = 4; ds.y = 6; std::cout << …
10 c++ 

2
Вирахування типів аргументів шаблону C ++:
У мене є код, який знаходить і роздруковує відповідність візерунка як перехід над контейнером рядків. Друк виконується у шаблоні функції foo Код #include <iostream> #include <algorithm> #include <iterator> #include <vector> #include <string> #include <tuple> #include <utility> template<typename Iterator, template<typename> class Container> void foo(Iterator first, Container<std::pair<Iterator, Iterator>> const &findings) { for …

1
Чому в std :: span відсутні оператори порівняння?
Хіба не std::spanрозроблена як легка посилання на субрегіони std::vector/ std::array/ простого масиву тощо? Чи не повинен він також містити операторів порівняння у своєму API, щоб вони відповідали їм? Які міркування за виключенням? Примітка: оператори порівняння, я маю в виду або повний набір ( <, <=, ...) або космічний корабель<=>
10 c++  std  c++20  std-span 

1
Чи дозволена арифметика вказівника на виділеному сховищі, оскільки C ++ 20?
У стандарті C ++ 20 сказано, що типи масивів - це неявний тип життя . Чи означає це, що масив до неявного типу життя може бути неявно створений? Неявне створення такого масиву не спричинило б створення елементів масиву? Розглянемо цей випадок: //implicit creation of an array of std::string //but not …

3
Непослідовне усічення безпідписаних виразів цілих чисел бітфілдів між C ++ та C у різних компіляторах
Редагувати 2 : Я налагоджував дивну тестову помилку, коли функція, яка раніше знаходилась у вихідному файлі C ++, але перейшла у дослідний файл C, почала повертати неправильні результати. Приведений нижче MVE дозволяє відтворити проблему з GCC. Однак, коли я, за примхою, склав приклад з Кланг (а пізніше і з В. …

1
Чому діапазони не можна використовувати для функціонування бібліотеки труб?
Джонатан Боккара (автор Fluent C ++ ) написав бібліотеку під назвою Труби . Цей "трубопровід", на головній сторінці сховища, каже, не схожий на використання діапазонів, хоча це виглядає так само: Це не на основі ледачого витягування, а швидше на прагнення натискання. Але заявлено, що не можна використовувати бібліотеку діапазонів для …

3
Чи можна nullptr перетворити на uintptr_t? Різні компілятори не згодні
Розглянемо цю програму: #include <cstdint> using my_time_t = uintptr_t; int main() { const my_time_t t = my_time_t(nullptr); } Не вдалося компілювати з msvc v19.24: <source>(5): error C2440: '<function-style-cast>': cannot convert from 'nullptr' to 'my_time_t' <source>(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an …
10 c++  c++11  gcc  visual-c++  clang 

1
Концепція перевірки TS ігнорує модифікатор приватного доступу
Я хочу написати поняття "Індексируемое", яке означає, що послідовність або починається / закінчується, що повертає RandomAccessIterator, або оператор [], визначається і повертає значення недійсного типу. Я використав ідеї зі статті Stroustrup для концепції Sequence та доповнив її: template <class T> concept bool Indexable = Sequence<T> || requires(T t, size_t n) …
10 c++  c++-concepts 

1
Проблема в GCC / C ++ 17 з класом шаблону шаблонів
Розглянемо 2 наступні перевантаження template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } Перший працює для звичайних занять, а другий - для шаблонів, які не є інстанційними. Наприклад: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 Тепер розглянемо наступну функцію …
10 c++  templates  gcc  clang  c++17 

4
Чому повертати NULL з main ()?
Іноді я бачу кодери, які використовують NULLяк повернене значення main()в програмах C і C ++, наприклад щось подібне: #include <stdio.h> int main() { printf("HelloWorld!"); return NULL; } Коли я компілюю цей `код з gcc, я отримую попередження: попередження: return робить ціле число від вказівника без виведення [-Wint-convert] що розумно, оскільки …
10 c++  c  null  return  return-value 

2
Вирахування аргументу шаблону для аргументу типу функції
Розглянемо наступну програму. #include <iostream> template <typename T> void f( void ( *fn )( T ) ) { fn( 42 ); } void g( int x ) { std::cout << "g( " << x << " );\n"; } int main() { f( g ); } Програма успішно збирається, і її …

1
Чи зможемо ми сконструювати контейнери з видами в C ++ 20?
Діапазон виходить на C ++ зі стандартною версією C ++ 20. Моє запитання: Чи зможемо ми побудувати (існуючі) стандартні бібліотечні контейнери з будь-яким діапазоном? І що ще важливіше, з видом діапазону? Наприклад, чи буде це: #include <vector> #include <iostream> #include <ranges> int main() { auto sq = [](int x) { …
10 c++  c++20  range-v3 

1
Витік пам’яті під час unorряд_map :: вставити виняток KeyEqual з GCC - порушуючи сувору гарантію безпеки винятків?
Я використовую GCC 7.3.1, але також перевірений на coliru, який, на мою думку, є версією 9.2.0. Побудувати за допомогою наступного: g++ -fsanitize=address -fno-omit-frame-pointer rai.cpp Ось rai.cpp: #include <iostream> #include <unordered_map> int main() { try { struct MyComp { bool operator()(const std::string&, const std::string&) const { throw std::runtime_error("Nonono"); } }; std::unordered_map<std::string, …

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