Результаты поиска по запросу "strict-aliasing"

2 ответа

) и обратно к исходному типу возвращает исходное значение указателя. - конец примечания]

ли (семантическая) разница между возвращаемым значением размещения new и приведенным значением его операнда? struct Foo { ... }; char buffer[...]; Foo *a = new(buffer) Foo; Foo *b = reinterpret_cast<Foo *>(buffer);Есть лиa а такжеb чем-то ...

2 ответа

@VittorioRomeo: Еще одно редактирование - я склонен это сделать.

отрим следующий сценарий: std::array<int, 8> a; auto p = reinterpret_cast<int(*)[8]>(a.data()); (*p)[0] = 42;Этонеопределенное поведение? Я думаю, что это. a.data() возвращаетint*, который не совпадает сint(*)[8] правила наложения ...

1 ответ

 объяснение. Я также добавил ссылку, подтверждающую ваше требование.

ец кода: struct S { int x; }; int func() { S s{2}; return (int &)s; // Equivalent to *reinterpret_cast<int *>(&s) }Я считаю, что это распространено и считается приемлемым. Стандарт гарантирует, что в структуре нет начального заполнения. Однако ...

ТОП публикаций

2 ответа

, gcc и clang следует рассматривать как обработку диалекта C, в котором эффективные типы, когда они установлены, становятся постоянными. Они не могут надежно распознать все случаи, когда эффективные типы могут быть изменены, и логика, необходимая для обработки, которая могла бы легко и эффективно обрабатывать многие случаи, о которых авторы gcc уже давно заявляли, не может быть обработана без потрошения оптимизации.

оложим, у меня есть кусок динамически распределенных данных: void* allocate (size_t n) { void* foo = malloc(n); ... return foo; }Я хочу использовать данные, на которые указываетfoo как особый тип,type_t, Но я хочу сделать это позже, а не во ...

6 ответов

, Есть и другие очень хорошие вопросы, и мы также отвечаем здесь на эту тему.

ой конкретной функции C ++ у меня есть указатель на большой буфер с плавающей точкой, который я хочу временно использовать для хранения половины числа двойников. Есть ли способ использовать этот буфер как пустое место для хранения двойников, что ...

3 ответа

@ M.M: Стандарт не признает разницу между непосредственным использованием агрегатного элемента и использованием его адреса и его использованием, а также в правилах псевдонимов не проводится различие между структурами и объединениями. Вместо этого поддержка практически любого вида доступа членов является проблемой качества реализации. Так получилось, что существующие версии gcc и clang поддерживают более гибкую семантику с указателями на элементы структуры, чем с lvalues ​​доступа к struct-member, но менее гибкую семантику с указателями на члены union, чем lvalues ​​для доступа union-member.

ми определениями: struct My_Header { uintptr_t bits; } struct Foo_Type { struct My_Header header; int x; } struct Foo_Type *foo = ...; struct Bar_Type { struct My_Header header; float x; } struct Bar_Type *bar = ...;Правильно ли говорить, что ...

3 ответа

(Как пояснение, объект, как правило, перестает существовать при отсутствии каких-либо существующих ссылок или указателей, которые когда-либо будут использоваться для доступа к нему или получения других указателей / объектов, которые будут использоваться таким образом). Основная причина, по которой существуют правила «псевдонимов», заключается в том, чтобы указывать, когда компиляторам необходимо делать допуски для ссылок, которые неожиданно идентифицируют тот же объект, но не требуются допуски в случаях, когда хранилище не изменено, и объект, который явно получен из другого, может вряд ли можно сказать «неожиданно» псевдоним это в контексте такого происхождения.

родолжение этого другоговопрос [https://stackoverflow.com/q/51930334/3545273]о повторном использовании памяти. Поскольку первоначальный вопрос касался конкретной реализации, ответ был связан с этой конкретной реализацией. Поэтому мне интересно, ...

2 ответа

Но кого это волнует? Это ужасная практика в любом случае.

ндарте C ++, в[Basic.lval] /11.6 [http://eel.is/c++draft/basic.lval#11.6] говорит: Если программа пытается получить доступ к сохраненному значению объекта через glvalue другого, чем один из следующих типов, поведение не определено: ...

3 ответа

 немного больше!

я есть некоторый код, который использует типизацию, чтобы избежать необходимости вызывать конструктор и деструктор члена "объекта", если / пока не потребуется использовать объект. Это работает нормально, но под g ++ 4.4.3 я получаю это страшное ...

2 ответа

вникнул в это.

челэта статья о строгом алиасинге в C / C ++ [http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html] , Я думаю, что то же самое относится к C ++. Как я понимаю, строгий псевдоним используется для изменения кода ...