Вопросы с тегом «c++»

C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.

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;) == N * sizeof(T)это правда.
9 c++  arrays  c++11  sizeof 

2
Какие пространства имен существуют и каковы правила?
Примечание: этот вопрос о name space, а не namespace. Стандарт C ++ имеет некоторые ссылки name space, но я не вижу определения этого. Стандарты гласят, что метки и макросы находятся в разных пространствах имен. Все остальные ссылки name spaceнаходятся в разделе совместимости с C / C ++, например так ( …
9 c++  namespaces 

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. «Вызов» …

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 arguments of …

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

2
Скопировать конструктор с неконстантным аргументом, предложенным правилами безопасности потока?
У меня есть обертка для какого-то унаследованного кода. 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 }; В этом унаследованном коде функция, которая …


2
Что гарантировано с C ++ std :: atomic на уровне программиста?
Я выслушал и прочитал несколько статей, выступлений и вопросов о стековом потоке std::atomicи хотел бы быть уверен, что хорошо это понял. Потому что я все еще немного запутался с видимостью записи строк кэша из-за возможных задержек в протоколах когерентности кэша MESI (или производных), буферах хранения, недействительных очередях и так далее. …

1
GCC не может сообщить о неправильно сформированном лямбда-вызове constexpr
Ниже приведены два тестовых примера для неопределенного поведения, выраженного как IIFE (немедленное название лямбда-экспрессии): constexpr auto test3 = []{ int* p{}; { int x{}; p = &amp;x; } return *p; // Undefined Behaviour }(); // IIFE constexpr auto test4 = []{ int x = std::numeric_limits&lt;int&gt;::min(); int y = -x; // …

1
Преобразование в void ** на разных компиляторах
Я запускаю следующий код через разные компиляторы: int main() { float **a; void **b; b = a; } Из того, что я был в состоянии собрать, void **это не общий указатель , который означает , что любое преобразование из другого указателя не должен составлять по крайней мере , бросить предупреждение. …
9 c++  c  cuda 

1
Как shift_right () предназначен для реализации в C ++ 20?
В C ++ 20 &lt;algorithm&gt;заголовок получает два новых алгоритма: shift_left()иshift_right() . Оба они принимают любой LegacyForwardIterator. Ведь shift_left()указано, что «шаги выполняются в порядке возрастания, iначиная с ​0»; для shift_right(), указано, что «если ForwardItсоответствует требованиям LegacyBidirectionalIterator, то перемещения выполняются в порядке убывания, iначиная с last - first - n - 1». …

1
Передача указателя на функцию из массива указателей на функцию в качестве аргумента шаблона
Я хотел бы передать указатель на функцию из массива указателей на функцию в качестве аргумента шаблона. Кажется, мой код компилируется с использованием MSVC, хотя Intellisense жалуется, что что-то не так. И gcc, и clang не могут скомпилировать код. Рассмотрим следующий пример: static void test() {} using FunctionPointer = void(*)(); static …
9 c++  templates  c++14 

3
unique_ptr <0 ИЛИ что делает меньше, чем оператор?
Я имею дело с кодом, который был написан не мной. У меня есть это утверждение: // p is type of std::unique_ptr&lt;uint8_t[]&gt; if (p &lt; 0) { /* throw an exception */ } Так что же p &lt; 0значит в этом контексте? На странице документации , я считаю, что мой случай …

1
несоответствие clang / gcc в специализации классов
Я столкнулся с этой проблемой, пытаясь специализировать tuple_size/ tuple_elementдля пользовательского класса в C ++ 17 для структурированного связывания. Ниже код компилируется в GCC, но не в clang (обе версии транка, см. Ссылку ниже). #include &lt;type_traits&gt; template&lt;typename T, typename... Ts&gt; using sfinae_t = T; template&lt;typename T, bool... Bs&gt; using sfinae_v_t = …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.