strict-aliasing

Недавно я узнал, что стандарт C++ содержит "строгие правила псевдонимирования", которые запрещают ссылаться на одно и то же место памяти через переменные разных типов. Однако стандарт позволяет типам char юридически псевдонимировать любой другой тип. Означает ли это, что reinterpret_cast может по закону исп...

Я читал о строгих правилах алиасинга на прошлой неделе или около того и наткнулся на эту статью: понимание строгого алиасинга C/C++ . В статье рассматривается несколько способов замены половинок 32-битного целого числа, дающих как хорошие примеры, так и те, которые нарушают строгое правило псевдонимирования....

Из-за чтения большого количества предупреждений не использовать союзы, подобные этому: union rgba { struct { uint8_t r, g, b, a; } components; uint8_t index[4]; uint32_t value; }; Поскольку это неопределенное поведение, я решил сохранить вещи простыми, как это: struct rgba { ...

На этот вопрос уже есть ответ здесь: приведение двойного массива к структуре двойников 6 ответов В различных кодовых базах 3d math я иногда сталкиваюсь с чем-то вроде этого: struct vec { float x, y, z; fl...

Я уже некоторое время читаю о строгом правиле сглаживания и начинаю по-настоящему путаться. Прежде всего, я прочитал эти вопросы и некоторые ответы: строгий антиалиасинга-правила-и-чар-указатели когда-это-чар-сейф-для-строгий указатель сглаживания это-строгое-правило-сглаживания-действительно-улица с двус...

(Примечание: хотя этот вопрос касается "хранилища", случай "загрузки" имеет те же проблемы и идеально симметричен.) Внутренние компоненты SSE обеспечивают _mm_storeu_pd функция со следующей сигнатурой: void _mm_storeu_pd (double *p, __m128d a); Поэтому, если у меня есть вектор из двух двойников, и я хоч...

TLDR; вызывает ли следующий код неопределенное (или неопределенное) поведение ? #include <stdio.h> #include <string.h> void printme(void *c, size_t n) { /* print n bytes in binary */ } int main() { long double value1 = 0; long double value2 = 0; memset( (void*) &value1, 0x00, size...

Я хотел бы знать, нарушаю ли я строгие правила псевдонимирования с этим фрагментом. (Я думаю, что да, поскольку это разыменование каламбурного указателя, однако это делается в одном выражении и / Wall не плачет.) inline double plop() const // member function { __m128d x = _mm_load_pd(v); ... // some...

когда спрашивают о общее неопределенное поведение в C, души более просвещенные, чем я ссылался на строгое правило сглаживания. О чем они говорят?...