Вопросы по теме 'type-punning'

Псевдоним строгого указателя: любое решение для конкретной проблемы?
У меня проблема, вызванная нарушением строгого правила псевдонима указателя. У меня есть тип T , полученный из шаблона, и некоторый интегральный тип Int того же размера (как и sizeof ). Мой код по существу делает следующее: T x =...
806 просмотров

Псевдоним строгого указателя: является ли доступ через «изменчивый» указатель/ссылку решением?
По пятам конкретной проблемы , самостоятельный ответ и комментарии к нему, я хотел бы понять, является ли это правильным решением, обходным путем/взломом или просто неправильным. В частности, я переписал код: T x = ...; if (*reinterpret_cast...
1482 просмотров

Введите каламбур, char[] и разыменование
У меня есть структура, предназначенная для хранения пользовательских данных (т.е. из плагина). У него есть такой char[] с заданным максимальным размером для хранения этих данных. struct A { // other members omitted // data meant to be...
763 просмотров
schedule 27.11.2022

Псевдоним T* с char* разрешен. Допускается ли и наоборот?
Примечание. Этот вопрос был переименован и сокращен, чтобы сделать его более точным и понятным. Большинство комментариев относятся к старому тексту. Согласно стандарту, объекты разных типов не могут использовать одну и ту же ячейку памяти....
3440 просмотров

Чтение младшего бита указателя таким образом, чтобы *вероятно* работало на как можно большем количестве систем.
Кажется, что младший бит указателей, равный 0, является более или менее довольно переносимым (где переносимость, очевидно, не означает «стандартный», но людям это сходит с рук, и в некоторых случаях они могут использовать это с некоторым...
98 просмотров
schedule 30.05.2024

c++ - тип каламбура из указателя без знака char, когда известен базовый тип
Вызывает ли следующая программа какое-либо неопределенное поведение? В частности, нарушает ли это какие-либо строгие правила псевдонимов? void zeroInt(unsigned char *mem) { *reinterpret_cast<int *>(mem) = 0; } int main() { int...
530 просмотров

Можно ли написать быструю функцию InvSqrt () Quake на Rust?
Это просто для удовлетворения моего любопытства. Есть ли реализация этого: float InvSqrt (float x) { float xhalf = 0.5f*x; int i = *(int*)&x; i = 0x5f3759df - (i>>1); x = *(float*)&i; x = x*(1.5f - xhalf*x*x);...
7952 просмотров
schedule 06.08.2022

Как элементы в std::unordered_set хранятся в памяти на С++?
Возясь с итераторами с типизированными каламбурами, я наткнулся на возможность сделать std::vector<int> vec{ 3, 7, 1, 8, 4 }; int* begin_i = (int*)(void*)&*vec.begin(); std::cout << "1st: " << begin_i << " = " <<...
591 просмотров
schedule 22.05.2022

Насколько плохо было бы использовать каламбур между тривиально копируемыми структурами?
У меня есть библиотека с интерфейсом Swift, которая скрывает слой C ++. В C ++ у меня struct A { ...} . Я хочу, чтобы Swift передавал копии этой структуры по значению (по разным сложным причинам). Swift понимает объявления C, но не C ++, поэтому...
119 просмотров
schedule 19.07.2023