Описание тега 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
ответа
Можно ли сделать так, чтобы `=` предпочитало присвоение из преобразования вместо (удаленного) копирования?
Я обнаружил несколько потоков, которые в значительной степени подразумевают, что это невозможно, но ни один из них не использует точно такую же комбинацию операторов и условий, поэтому я хотел бы спросить более конкретно. Надеюсь, это означает, чт…
12 июл '16 в 12:12
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++ со стандартной компоновкой в контексте межпроцессного взаимодействия
Стандарт гласит, что Стандартные типы макетов полезны для связи с кодом, написанным на других языках программирования. Но для межпроцессного взаимодействия на одном и том же компьютере это верно только в том случае, если используются одинаковые выра…
19 дек '17 в 23:48
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? Примечание: это дополнительный вопрос к этому.
29 окт '18 в 17:45
6
ответов
Почему определение POD "стандартной компоновки" в C++11 таково?
Я смотрю на новое, смягченное определение POD в C++ 11 (раздел 9.7) Класс стандартного макета - это класс, который: не имеет нестатических членов-данных типа нестандартного класса макета (или массива таких типов) или ссылки, не имеет виртуальных фун…
23 авг '11 в 12:16
2
ответа
Какова цель гарантий стандартной компоновки для типов "черного ящика"?
Стандарт C++ указывает, что mutex, atomics или conditinal_variable имеют тип стандартной компоновки. В чем выгода этой спецификации? Как пользователь может воспользоваться этим свойством? И вообще, что я могу получить, если знать, что тип является с…
27 сен '17 в 13:20
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…
01 фев '14 в 15:33
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