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

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

1
Тип автоматичного повернення шаблону та неоднозначності
У мене функція шаблону перевантажена: template<typename T1, typename T2> auto overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a ? a : b; } template<typename RT, typename T1, typename T2> RT overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a …

4
Чи правильно використовувати std :: transform with std :: back_inserter?
Cppreference має такий приклад коду для std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Але це також говорить: std::transformне гарантує порядок застосування unary_opабо binary_op. Щоб застосувати функцію до порядку послідовності або застосувати функцію, що модифікує елементи послідовності, використовуйте std::for_each. Імовірно, це дозволяє паралельні …

2
Чи безпечно викликати розміщення нового на "this" для тривіального об'єкта?
Я знаю, що це питання вже задавали кілька разів, але я не зміг знайти відповіді на цей конкретний випадок. Скажімо, у мене є тривіальний клас, який не володіє жодними ресурсами та має порожній деструктор та конструктор за замовчуванням. Він має декілька змінних членів з ініціалізацією в класі; не одна з …

3
Невизначена поведінка у векторі відведених векторів
Чому цей код записує невизначене число, здавалося б, неініціалізованих цілих чисел? #include <iostream> #include <vector> using namespace std; int main() { for (int i : vector<vector<int>>{{77, 777, 7777}}[0]) cout << i << ' '; } Я очікував, що результат буде 77 777 7777. Чи повинен цей код бути невизначеним?
19 c++ 

2
int numeral -> правила перетворення покажчика
Розглянемо наступний код. void f(double p) {} void f(double* p) {} int main() { f(1-1); return 0; } MSVC 2017 цього не компілює. Зрозуміло, існує неоднозначний перевантажений дзвінок, 1-1який такий же, як 0і тому може бути перетворений в double*. Інші хитрощі, як-от 0x0, 0Lабо static_cast<int>(0), теж не працюють. Навіть оголошення …
19 c++  visual-c++  types 

3
c ++ Нитки всередині для циклічного друку неправильних значень
Я намагаюся зрозуміти Multi-Threading в c ++, але я застряг у цій проблемі: якщо я запускаю теми в циклі for, вони друкують неправильні значення. Це код: #include <iostream> #include <list> #include <thread> void print_id(int id){ printf("Hello from thread %d\n", id); } int main() { int n=5; std::list<std::thread> threads={}; for(int i=0; …



1
Чому std :: атомний конструктор поводиться по-різному в C ++ 14 і C ++ 17
Я працюю над проектом на C ++ 11 і спробував наступний код #include <atomic> struct A { std::atomic_int idx = 1; }; int main() { return 0; } Я отримую помилку компілятора error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]' std::atomic_int idx = 1; ^ Той самий …
19 c++  c++14  c++17  stdatomic 

2
Чому концепція same_as перевіряє рівність типу двічі?
Дивлячись на можливу реалізацію тієї самої концепції на https://en.cppreference.com/w/cpp/concepts/same_as, я помітив, що відбувається щось дивне. namespace detail { template< class T, class U > concept SameHelper = std::is_same_v<T, U>; } template< class T, class U > concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>; Перше питання - чому SameHelperпоняття не …
19 c++  c++20  concept 


5
Як вирішити звисаючий const ref
Наступна коротка програма #include <vector> #include <iostream> std::vector<int> someNums() { return {3, 5, 7, 11}; } class Woop { public: Woop(const std::vector<int>& nums) : numbers(nums) {} void report() { for (int i : numbers) std::cout << i << ' '; std::cout << '\n'; } private: const std::vector<int>& numbers; }; int …
18 c++ 

3
Значення замикання лямбда можуть бути передані як референтні параметри rvalue
Я виявив, що lvalueлямбда-закриття завжди можна передавати як rvalueпараметри функції. Дивіться наступну просту демонстрацію. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` function …

1
Оператор new () поводиться по-різному, коли оператор delete () видаляється залежно від існування конструктора за замовчуванням
Створення нового об'єкта класу C з оператором new () дає тут помилку: class C { public: C() {} virtual ~C() {} void operator delete(void*) = delete; }; int main() { C* c = new C; } з C2280: 'void C::operator delete(void *)': function was explicitly deleted Але коли я заміняю …

4
Постійний перерахунок C ++ 11
Чи є спосіб перевірити в C ++ 11, якщо перерахунок є безперервним ? Цілком справедливо давати значення перерахунків, яких немає. Чи може бути така функція, як ознака типу в C ++ 14, C ++ 17 або, можливо, C ++ 20, щоб перевірити, чи перераховується перерахунок? Це потрібно використовувати в static_assert. …
17 c++  c++11  c++14  c++17  c++20 

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