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

9
Как shift_right () предназначен для реализации в C ++ 20?

В C ++ 20 <algorithm>заголовок получает два новых алгоритма: shift_left()иshift_right() . Оба они принимают любой LegacyForwardIterator. Ведь shift_left()указано, что «шаги выполняются в порядке возрастания, iначиная с ​0»; для shift_right(), указано, что «если ForwardItсоответствует...

9
Передача указателя на функцию из массива указателей на функцию в качестве аргумента шаблона

Я хотел бы передать указатель на функцию из массива указателей на функцию в качестве аргумента шаблона. Кажется, мой код компилируется с использованием MSVC, хотя Intellisense жалуется, что что-то не так. И gcc, и clang не могут скомпилировать код. Рассмотрим следующий пример: static void test() {}...

9
Преобразование в void ** на разных компиляторах

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

9
GCC не может сообщить о неправильно сформированном лямбда-вызове constexpr

Ниже приведены два тестовых примера для неопределенного поведения, выраженного как IIFE (немедленное название лямбда-экспрессии): constexpr auto test3 = []{ int* p{}; { int x{}; p = &x; } return *p; // Undefined Behaviour }(); // IIFE constexpr auto test4 = []{ int x =...

9
Что гарантировано с C ++ std :: atomic на уровне программиста?

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

9
Скопировать конструктор с неконстантным аргументом, предложенным правилами безопасности потока?

У меня есть обертка для какого-то унаследованного кода. class A{ L* impl_; // the legacy object has to be in the heap, could be also unique_ptr A(A const&) = delete; L* duplicate(){L* ret; legacy_duplicate(impl_, &L); return ret;} ... // proper resource management here }; В этом...

9
В чем разница между квалификатором const в C и квалификатором const в C ++?

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

9
Неуказанное неявное создание объекта

Поскольку P0593 неявное создание объектов для низкоуровневой манипуляции с объектами было принято, объекты теперь можно создавать неявно в C ++ 20. В частности, формулировка, предложенная предложением, позволяет определенным операциям (таким как std::malloc) автоматически создавать и запускать...

9
Это UB, чтобы возобновить сопрограмму функции-члена объекта, время жизни которого закончилось?

Этот вопрос вытекает из этого комментария: объяснение времени жизни лямбда для сопрограмм C ++ 20 относительно этого примера: auto foo() -> folly::coro::Task<int> { auto task = []() -> folly::coro::Task<int> { co_return 1; }(); return task; } Таким образом, вопрос заключается в...

9
Как получить количество элементов в std :: array <T, N>, не создавая его экземпляр?

Есть std::array<T, N>::size(), но это не статично, поэтому требуется экземпляр std::array. Есть ли способ получить значение, которое он возвращает (который является Nиз std::array<T, N>) без необходимости создания экземпляра массива? Для обычного массива я мог бы использовать sizeof, но...

9
Какие пространства имен существуют и каковы правила?

Примечание: этот вопрос о name space, а не namespace. Стандарт C ++ имеет некоторые ссылки name space, но я не вижу определения этого. Стандарты гласят, что метки и макросы находятся в разных пространствах имен. Все остальные ссылки name spaceнаходятся в разделе совместимости с C / C ++, например...

9
Создание стандартных исключений с аргументом нулевого указателя и невозможными постусловиями

Рассмотрим следующую программу: #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и отменяют программу с сообщением...

9
Как избежать неявных преобразований из int (0) в указатель в векторе

Есть ситуация, когда я хочу собрать все имена узлов пути к ключу в JSON. Рассмотрим условие индекса массива «0», «1» также допускается, но легко забыть кавычки, которые могут привести к сбою при разыменовании. Поэтому я хочу отказаться от этого. Пример: #include <vector> #include...

9
Допустимый синтаксис вызова псевдодеструктора для плавающей константы

Рассмотрим следующую демонстрационную программу. #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...