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

25
Какова семантика перекрывающихся объектов в C?

Рассмотрим следующую структуру: struct s { int a, b; }; Обычно 1 , эта структура будет иметь размер 8 и выравнивание 4. Что если мы создадим два struct sобъекта (точнее, мы запишем в выделенное хранилище два таких объекта), причем второй объект будет перекрывать первый? char *storage = malloc(3 *...

20
Как лямбда-макрос создает лямбду?

Я нашел этот кусок кода на GitHub, но не совсем понял: #define lambda(ret_type, _body) ({ ret_type _ _body _; }) Затем: int (*max)(int, int) = lambda(int, (int x, int y) { return x > y ? x : y; }); int max_value = max(1, 2); // max_value is 2 Что делают подчеркивания внутри #defineи как он...

14
Является ли разница между двумя экземплярами constexpr указателей __func__ все еще constexpr?

Это действительный C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC и MSVC считают, что все в порядке, Clang считает, что это не так: Compiler Explorer . Все компиляторы соглашаются, что с этим все в порядке: Compiler Explorer . int main() { constexpr auto p = __func__;...

11
Сброс слабого_птра влияет на shared_ptr?

Я не очень привык к использованию weak_ptrи столкнулся с довольно запутанной ситуацией. Я использую Intel XE 2019 Composer update 5 ( пакет 2019.5.281 ) в сочетании с Visual Studio 2019 ver. 16.2.5 . Я компилирую в 64-битной версии. Я использую стандарт C ++ 17 . Вот код для моего решения спайка:...

10
Предупреждение: Инициализация UnsafeBufferPointer <T> приводит к зависанию указателя буфера

После обновления до Swift 5.2 / Xcode 11.4 появилось предупреждение о следующем коде: extension Data { init<T>(from value: T) { var value = value let pointer = UnsafeBufferPointer(start: &value, count: 1) self.init(buffer: pointer) } func to<T>(type: T.Type) -> T { return...

9
Как работает sizeof с разыменованием указателя на массив?

Здесь у меня есть указатель ptrна массив arrиз 4 целых чисел. ptrуказывает на весь массив. ptr[0]или *ptrуказывает на первый элемент массива, поэтому добавление 1 к ptr[0]дает адрес второго элемента массива. Я не могу понять, почему использование sizeof(ptr[0])дает размер всего массива, 16 байтов,...

9
Может ли указатель на неполный тип быть неполным?

Может int (*)[]быть неполного типа? C 2018 6.2.5 1 говорит: В различных точках в единице перевода тип объекта может быть неполным (без достаточной информации для определения размера объектов этого типа) или полным (имеющим достаточную информацию). Таким образом, кажется, что если размер типа...