Описание тега standard-layout

1 ответ

Стандартная компоновка C++

Я просматривал отличные статьи о классах C++ POD, Trivial и Standard Layout. Одно свойство, которое я не совсем понял в отношении стандартного макета, заключается в следующем: A standard layout has no base classes of the same type as the first non-s…
02 июл '12 в 20:06
2 ответа

Можно ли сделать так, чтобы `=` предпочитало присвоение из преобразования вместо (удаленного) копирования?

Я обнаружил несколько потоков, которые в значительной степени подразумевают, что это невозможно, но ни один из них не использует точно такую ​​же комбинацию операторов и условий, поэтому я хотел бы спросить более конкретно. Надеюсь, это означает, чт…
1 ответ

Должен ли класс быть стандартным типом макета, чтобы быть уверенным в смещениях памяти его членов?

Допустим, я хочу написать навязчивый список. У меня есть шаблон класса навязчивого списка, который принимает тип и указатель на член для использования в качестве узла. Это выглядит примерно так: // This needs to be a member of anything the intrusive…
26 май '15 в 05:08
1 ответ

C++ - стандартная верстка

В соответствии с текущим проектом стандарта C++, класс стандартного макета либо не имеет нестатических членов данных в самом производном классе и не более одного базового класса с нестатическими членами данных, или не имеет базовых классов с нестати…
26 мар '14 в 13:39
1 ответ

Почему эта структура не является стандартной версткой?

Кусок кода стоит тысячи слов. #include <iostream> #include <type_traits> using namespace std; struct A { int a; }; struct B : A { int b; }; int main() { cout << is_standard_layout<B>::value << endl; // output false! WHY…
16 дек '12 в 10:32
1 ответ

Могут ли C++14 стандартные типы макетов использовать `alignas` для полей?

Я хотел бы использовать шаблоны, чтобы упростить конструирование союзов с нетривиальными типами. Следующее, кажется, "работает" на практике, но технически не является законным по спецификации: template<typename T> struct union_entry { void (*d…
12 окт '16 в 05:31
1 ответ

Чем полезен is_standard_layout?

Из того, что я понимаю, стандартное расположение позволяет три вещи: Оптимизация пустого базового класса Обратная совместимость с C с определенным приведением указателей Использование offsetof Теперь в библиотеке есть is_standard_layout метафункция …
13 апр '13 в 23:58
0 ответов

Типы C++ со стандартной компоновкой в ​​контексте межпроцессного взаимодействия

Стандарт гласит, что Стандартные типы макетов полезны для связи с кодом, написанным на других языках программирования. Но для межпроцессного взаимодействия на одном и том же компьютере это верно только в том случае, если используются одинаковые выра…
1 ответ

Существуют ли какие-либо стандартные гарантии для контейнеров STL?

struct A { // ... some methods ... std::vector<int> foo; // ... more data members ... }; С g++4.7 и libstdC++ я получаю std::is_standard_layout<A>::value == true,Но что происходит с другими компиляторами или стандартными библиотеками?Ест…
03 мар '13 в 16:02
1 ответ

Почему профсоюзы, в которых есть члены с разным контролем доступа, не являются стандартными?

§9.0 7. Класс S является классом стандартной компоновки, если он: (7.3) имеет одинаковый контроль доступа (пункт 11) для всех нестатических элементов данных, 8 Структура стандартного макета - это класс стандартного макета, определенный структурой кл…
26 мар '15 в 14:11
0 ответов

POD-типы и наследование в C++11: почему невозможно наследовать и расширять и при этом оставаться POD-типом

Я думаю, что это лучше всего объяснить на примере: #include <iostream> struct A { int a; }; struct B { A a; int b; }; struct C: A { int c; }; static inline std::ostream& operator<< (std::ostream& os, const A& a) { return os &…
27 июн '18 в 22:58
1 ответ

Союз макетов совместимых типов

Посмотрите на этот код: struct A { short s; int i; }; struct B { short s; int i; }; union U { A a; B b; }; int fn() { U u; u.a.i = 1; return u.b.i; } Гарантируется ли это, что fn() возвращается 1? Примечание: это дополнительный вопрос к этому.
6 ответов

Почему определение POD "стандартной компоновки" в C++11 таково?

Я смотрю на новое, смягченное определение POD в C++ 11 (раздел 9.7) Класс стандартного макета - это класс, который: не имеет нестатических членов-данных типа нестандартного класса макета (или массива таких типов) или ссылки, не имеет виртуальных фун…
23 авг '11 в 12:16
2 ответа

Какова цель гарантий стандартной компоновки для типов "черного ящика"?

Стандарт C++ указывает, что mutex, atomics или conditinal_variable имеют тип стандартной компоновки. В чем выгода этой спецификации? Как пользователь может воспользоваться этим свойством? И вообще, что я могу получить, если знать, что тип является с…
4 ответа

Обтекание C++ в C: Производные к базовым преобразованиям

Я оборачиваю простую иерархию наследования C++ в "объектно-ориентированную" C. Я пытаюсь выяснить, есть ли какие-то хитрости при обработке указателей на объекты C++ как указателей на непрозрачные структуры C. В частности, при каких обстоятельствах п…
06 фев '12 в 22:50
0 ответов

Позволяет ли мне свойство POD boost uuid передавать его через границу dll/so?

Могу ли я вернуть boost uuids из вызова функции через границу dll? Имеет ли значение, если я вернусь по значению или по ссылке?
10 май '15 в 08:00
3 ответа

Общая начальная последовательность и выравнивание

Думая о контр-примере для этого вопроса, я придумал: struct A { alignas(2) char byte; }; Но если это законный и стандартный макет, совместим ли он с этим макетом? struct B? struct B { char byte; }; Кроме того, если у нас есть struct A { alignas(2) c…
2 ответа

Понимание примера кода с reinterpret_cast из POD-структуры

Я нашел некоторый код и хочу убедиться, что я правильно понимаю это. Вариант использования - это упакованное изображение, которое представлено массивом значений. В этом примере три значения представляют один пиксель. Код, который я нашел, выглядит п…
28 ноя '18 в 07:11
5 ответов

Стандартная компоновка и обивка хвоста

Дэвид Холлман недавно написал в Твиттере следующий пример (который я немного сократил): struct FooBeforeBase { double d; bool b[4]; }; struct FooBefore : FooBeforeBase { float value; }; static_assert(sizeof(FooBefore) > 16); //-------------------…
18 дек '18 в 16:32
6 ответов

Что такое агрегаты и POD и как / почему они особенные?

Этот FAQ посвящен Агрегатам и POD и содержит следующие материалы: Что такое агрегаты ? Что такое POD (простые старые данные)? Как они связаны? Как и почему они особенные? Какие изменения для C++11?
14 ноя '10 в 15:35