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

9
foo (void *) против foo (void *)

Говоря функционально и синтаксически, есть ли разница между функцией, прототип которой int foo(void)и int foo(void *)? Я знаю разницу между, например, int bar(int)и int bar(int *)- один из них ищет int, а другой ищет указатель int. Ведет ли voidсебя так...

9
Безопасно ли для параллелизма вызывать concurrency :: concurrent_vector :: push_back при переборе этого concurrent_vector в другом потоке?

push_back , begin , end описаны как параллельный сейф в https://docs.microsoft.com/en-us/cpp/parallel/concrt/reference/concurrent-vector-class?view=vs-2019#push_back Однако приведенный ниже код утверждает. Возможно, потому что элемент добавлен, но еще не инициализирован. struct MyData { explicit...

9
Что значит «сильно случается раньше»?

Фраза «сильно случается раньше» используется несколько раз в проекте стандарта C ++. Например: Завершение [basic.start.term] / 5 Если завершение инициализации объекта со статической продолжительностью хранения сильно происходит до вызова std :: atexit (см. [Support.start.term]), вызов функции...

9
От естественного языка к выражению C ++

Назначение: Переведите следующие выражения на естественном языке в выражения C ++. Предположим, что все переменные являются неотрицательными числами или логическими (со значением true или false). Естественный язык: Либо a, либо b оба имеют значение false, либо c соответствует true, но не оба. Мое...

9
Могу ли я использовать собственный распределитель для std :: array для безопасных криптографических ключей?

Я знаю, std::arrayчто полностью распределен в стеке, но этот вопрос мотивирован проблемами безопасности, которые требуют двух вещей: Данные в std::arrayнуле или будут рандомизированы при уничтожении Данные в std::arrayбудут заблокированы , так что они никогда не попадут на диск ни в случае сбоя, ни...

9
Как std :: lock_guard может быть быстрее, чем std :: mutex :: lock ()?

Я спорил с коллегой о lock_guard, и он предположил, что lock_guard, вероятно, медленнее, чем mutex :: lock () / mutex :: unlock () из-за стоимости создания и удаления класса lock_guard. Затем я создал этот простой тест, и, что удивительно, версия с lock_guard почти в два раза быстрее, чем версия с...

9
Как предотвратить изменение массива данных?

Скажем, у меня есть класс, который выглядит следующим образом (это только пример): class A { double *ptr; public: A() : ptr( new double[100] ) {} A( const A &other ) { other.ptr[7] = 15; } void doNotChangeMyData() const { ptr[43] = 14; } void changeMyData() { ptr[43] = 14; } ~A() { delete[]...

9
Что такое эквивалент MSVC для -fno-char8_t?

В C ++ 20 u8строковых литералов основаны на char8_tтипе. Они сознательно больше не переходят в char const*: const char* str = u8"Hall\u00f6chen \u2603"; // no longer valid in C++20 Конечно, конечная цель при переходе на C ++ 20 - полностью перейти на новое поведение (в приведенном выше примере:...

9
Пытаясь понять шаблоны и поиск имени

Я пытаюсь понять следующие фрагменты кода Фрагмент №1 template <typename T> struct A { static constexpr int VB = T::VD; }; struct B : A<B> { }; Ни gcc9, ни clang9 не выдают здесь ошибку. В. Почему этот код компилируется? Разве мы не являемся экземплярами A<B>при наследовании от B?...

9
Правильный способ вернуть указатель на `новый` объект из функции Rcpp

Рассмотрим 1) пользовательский класс с потенциально большим объемом памяти и 2) функцию верхнего уровня, которая выполняет некоторую предварительную обработку, а затем создает и возвращает новый объект нашего пользовательского класса. Чтобы избежать ненужного копирования по значению, функция...

9
Разрешено ли добавлять ноль к нулевому указателю?

Я знаю, что арифметика указателей запрещена для нулевых указателей. Но представьте, у меня есть что-то вроде этого: class MyArray { int *arrayBegin; // pointer to the first array item, NULL for an empty array unsigned arraySize; // size of the array, zero for an empty array public: int *begin()...

9
Порядок выполнения оператора new и аргумента конструктора

Спецификация C ++ определяет порядок operator newи конструктор Aв new C(A()). G ++ пусть порядок будет A()-> new-> C(), но clang ++ пусть это будет new-> A()-> C(). Разница вызвана неопределенным поведением? g ++: 7.4.0 clang ++: 10.0.0 #include <iostream> #include <cstdlib>...

9
Скрыть пустой базовый класс для агрегатной инициализации

Рассмотрим следующий код: struct A { // No data members //... }; template<typename T, size_t N> struct B : A { T data[N]; } Вот как вы должны инициализировать B: B<int, 3> b = { {}, {1, 2, 3} }; я хочу избежать ненужного пустого {} для базового класса. Существует решение , предложенное...

9
Является ли new (this) ThisClass () плохой идеей?

class FooView final : public Something { ... void refresh() { this->~FooView(); new (this) FooView(); } } Я никогда не видел эту идиому, и кажется, что она может быть очень тонкой и грязной, но я не могу думать о проблеме с ней (пока FooViewона окончательна). Это плохая...

9
Вариация на тему типа прокалывания: на месте тривиальная конструкция

Я знаю, что это довольно распространенная тема, но насколько легко найти типичный UB, я не нашел этот вариант до сих пор. Итак, я пытаюсь официально представить объекты Pixel, избегая при этом фактической копии данных. Это действительно? struct Pixel { uint8_t red; uint8_t green; uint8_t blue;...

9
несоответствие clang / gcc в специализации классов

Я столкнулся с этой проблемой, пытаясь специализировать tuple_size/ tuple_elementдля пользовательского класса в C ++ 17 для структурированного связывания. Ниже код компилируется в GCC, но не в clang (обе версии транка, см. Ссылку ниже). #include <type_traits> template<typename T,...

9
unique_ptr <0 ИЛИ что делает меньше, чем оператор?

Я имею дело с кодом, который был написан не мной. У меня есть это утверждение: // p is type of std::unique_ptr<uint8_t[]> if (p < 0) { /* throw an exception */ } Так что же p < 0значит в этом контексте? На странице документации , я считаю, что мой случай 16) y < nullptr, где0...