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

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

3
list :: empty () багатопотокова поведінка?
У мене є список, з якого я хочу захоплювати елементи з різних потоків. Щоб уникнути блокування файлу mutex, який захищає список, коли він порожній, я перевіряю empty()перед блокуванням. Це добре, якщо дзвінок на list::empty()неправильний 100% часу. Я хочу лише уникнути збоїв або зривів одночасних list::push()та list::pop()викликів. Чи можу я припустити, …

3
Генерація коду лямбда C ++ із захопленням Ініта в C ++ 14
Я намагаюся зрозуміти / уточнити код коду, який генерується при передачі захоплень лямбдам, особливо в узагальнених захопленнях init, доданих в C ++ 14. Наведіть наведені нижче зразки коду. Це моє поточне розуміння того, що буде створювати компілятор. Випадок 1: захоплення за значенням / захоплення за замовчуванням за значенням int x …
9 c++  lambda  c++14  move 

2
Дійсний синтаксис виклику псевдодеструктора для плаваючої константи
Розглянемо наступну показову програму. #include <iostream> int main() { typedef float T; 0.f.T::~T(); } Цю програму складено Microsoft Visual Studio Community 2019. Але clangі gccвидайте помилку на зразок цієї prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T' 7 | 0.f.T::~T(); | ^~~~~ Якщо записати вираз, як ( 0.f ).T::~T()тоді, …


2
Побудувати стандартні винятки з аргументом нульового вказівника та неможливими постумовами
Розглянемо наступну програму: #include<stdexcept> #include<iostream> int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&) { std::cout << "Caught!\n"; } } GCC та Clang з libstdc ++ дзвонять std::terminateта скасовують програму із повідомленням terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Clang з libc ++ …

2
Чи можу я повернути тимчасовий трубопровід до дальності дії?
Припустимо, у мене є generate_my_rangeклас, який моделює range(зокрема, є regular). Тоді правильний наступний код: auto generate_my_range(int some_param) { auto my_transform_op = [](const auto& x){ return do_sth(x); }; return my_custom_rng_gen(some_param) | ranges::views::transform(my_transform_op); } auto cells = generate_my_range(10) | ranges::to<std::vector>; Чи my_custom_rng_gen(some_param)приймається за значенням оператором (першим) труби, або я маю звисаючу посилання, …
9 c++  range-v3 

1
Як отримати кількість елементів у std :: array <T, N>, не створюючи його екземпляр?
Є std::array&lt;T, N&gt;::size(), але це нестатично, тому він вимагає екземпляра std::array. Чи є спосіб , щоб отримати значення , яке вона повертає (який є Nв std::array&lt;T, N&gt;) без того , щоб побудувати екземпляр масиву? Для нормального масиву я міг би використати sizeof, але я не бачу гарантії, яка sizeof(std::array&lt;T, N&gt;) …
9 c++  arrays  c++11  sizeof 

1
Чи варто UB відновити функцію члена члена об'єкта, термін експлуатації якого закінчився?
Це питання випливає з цього коментаря: пояснення життя Ламбди для C ++ 20 спільних процедур щодо цього прикладу: auto foo() -&gt; folly::coro::Task&lt;int&gt; { auto task = []() -&gt; folly::coro::Task&lt;int&gt; { co_return 1; }(); return task; } Таким чином, питання полягає в тому, чи fooне призведе до виконання повернутої кореневищем UB. …

2
Які простори імен є і які правила?
Зауважте: це питання про name space, а не namespace. Стандарт C ++ має деякі посилання на це name space, але я не бачу визначення цього. У стандартах зазначено, що мітки та макроси знаходяться в різних просторах імен. Усі інші посилання на name spaceрозділ сумісності C / C ++, як це …
9 c++  namespaces 

1
Невказане неявне створення об'єкта
Оскільки P0593 було прийнято неявне створення об'єктів для маніпулювання об'єктами низького рівня , об'єкти тепер можуть створюватися неявно в C ++ 20. Зокрема, формулювання, введене пропозицією, дозволяє певним операціям (таким як std::malloc) автоматично створювати та запускати тривалість життя об'єктів певних типів, так званих неявних типів життя , якщо введення таких …

2
Чому C ++ не може вивести T під час виклику до Foo <T> :: Foo (T&&)?
З огляду на таку структуру шаблону: template&lt;typename T&gt; struct Foo { Foo(T&amp;&amp;) {} }; Цей компілюється і Tвважається таким int: auto f = Foo(2); Але це не складається: https://godbolt.org/z/hAA9TE int x = 2; auto f = Foo(x); /* &lt;source&gt;:12:15: error: no viable constructor or deduction guide for deduction of template …

2
Яка різниця між класифікатором const у C та класифікатором const у C ++?
Я знайшов коментар користувача R .. : C і C ++ - це не одна і та ж мова. Зокрема, C constне має нічого спільного з C ++ const. Я знаю, що одна різниця між constкласифікатором у C та constкласифікатором у C ++ - це його зв'язок за замовчуванням. Об'єкт, …

2
Скопіюйте конструктор з аргументом non-const, запропонованим правилами безпеки потоку?
У мене є обгортка для якогось фрагмента спадкового коду. class A{ L* impl_; // the legacy object has to be in the heap, could be also unique_ptr A(A const&amp;) = delete; L* duplicate(){L* ret; legacy_duplicate(impl_, &amp;L); return ret;} ... // proper resource management here }; У цьому застарілому коді функція, …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.