Что такое типы POD в C ++?

Это может показаться немного сумасшедшим, но микроволновая печь служит в качестве микроволнового экрана. Поэтому, помещая устройство в микроволновую печь (НЕ включайте микроволновую печь, пока ваше устройство внутри!) Приведет к значительному снижению уровня сигнала. Он определенно бьет, стоя в лифте ...

886
задан Azeem 20 April 2018 в 10:32
поделиться

4 ответа

POD обозначает Простые Данные - то есть, класс (определенный ли с ключевым словом struct или ключевым словом class) без конструкторов, деструкторы и виртуальные участники функционируют. статья Википедии о POD вдается в немного большее количество подробностей и определяет его как:

А Простая Структура данных в C++ является совокупным классом, который содержит только ПЕРЕХОДНЫЕ ПРИСТАВКИ как участников, не имеет никакого пользовательского деструктора, никакого пользовательского оператора присваивания копии и никаких нестатических членов указателя на тип элемента.

Большая деталь может быть найдена в этот ответ для C++ 98/03 . C++ 11 изменил правила окружающий POD, ослабив их значительно, таким образом потребность последующего ответа здесь .

632
ответ дан Community 20 April 2018 в 10:32
поделиться

Простые Данные

Короче говоря, это - все встроенные типы данных (например, int, char, float, long, unsigned char, double, и т.д.) и все агрегирование данных POD. Да, это - рекурсивное определение.;)

, Чтобы быть более ясным, POD - то, что мы называем "структурой": единица или группа единиц, которые просто хранят данные.

17
ответ дан Vladislav Toncharov 20 April 2018 в 10:32
поделиться

С C++ Простые Данные только означают, что вещами как интервал, символ, и т.д. являются единственные используемые типы. Простые Данные действительно означают на практике, что можно взять структуру memcpy они от одного местоположения в памяти другому, и вещи будут работать точно как Вы, ожидал бы (т.е. не аварийное завершение). Это повреждается, если Ваш класс или какой-либо класс, который содержит Ваш класс, имеет как участник, который является указателем или ссылкой или классом, который имеет виртуальную функцию. По существу, если указатели должны быть включены где-нибудь, не Простые Данные.

-6
ответ дан Mark Kegel 20 April 2018 в 10:32
поделиться

Очень неофициально:

POD А является типом (включая классы), где компилятор C++ гарантирует, что не будет никакого "волшебного" продолжения в структуре: например, скрытые указатели на vtables, смещения, к которым относятся адрес, когда это брошено к другим типам (по крайней мере, если POD цели также), конструкторы или деструкторы. Примерно говоря, тип является POD, когда единственными вещами в нем являются встроенные типы и комбинации их. Результат - что-то, что "действует как" тип C.

менее неофициально:

  • int, char, wchar_t, bool, float, double ПЕРЕХОДНЫЕ ПРИСТАВКИ, как long/short и signed/unsigned версии их.
  • указателями (включая указатель на функцию и указатель на участника) являются ПЕРЕХОДНЫЕ ПРИСТАВКИ,
  • enums ПЕРЕХОДНЫЕ ПРИСТАВКИ
  • const или volatile, POD является POD.
  • class, struct или union из ПЕРЕХОДНЫХ ПРИСТАВОК POD при условии, что все нестатические элементы данных public, и он не имеет никакого базового класса и никаких конструкторов, деструкторов или виртуальных методов. Статические участники не останавливают что-то являющееся POD по этому правилу. Это правило изменилось в C++ 11, и определенным членам парламента, не занимающим официального поста разрешают: Может класс со всеми членами парламента, не занимающими официального поста быть классом POD?
  • Википедия является неправильной сказать, что POD не может иметь членов указателя на участника типа. Или скорее это корректно для C++ 98 формулировок, но TC1 сделал явным, что указатели на участника являются POD.

Официально (C++ 03 Стандарта):

3.9 (10): "Арифметические типы (3.9.1), перечисляемые типы, типы указателей и указатель на типы элемента (3.9.2) и квалифицированные к условной цене версии этих типов (3.9.3) являются коллективно типами скаляра вызывающей стороны. Скалярные типы, типы структуры POD, объединение POD вводит (пункт 9), массивы таких типов и квалифицированные к условной цене версии этих типов (3.9.3) коллективно называют типами POD"

9 (4): "Структура POD является совокупным классом, который не имеет никаких нестатических элементов данных типа non-POD-struct, non-POD-union (или массив таких типов) или ссылка, и не имеет никакого пользователя - определяют оператор копии и никакой пользовательский деструктор. Так же объединение POD является совокупным объединением, которое не имеет никаких нестатических элементов данных типа non-POD-struct, non-POD-union (или массив таких типов) или ссылка, и не имеет никакого пользователя - определяют оператор копии и никакой пользовательский деструктор.

8.5.1 (1): "Агрегат является массивом или классом (пункт 9) без объявленных пользователями конструкторов (12.1), никакие частные или защищенные нестатические элементы данных (пункт 11), никакие базовые классы (пункт 10) и никакие виртуальные функции (10.3)".

325
ответ дан Ciro Santilli 新疆改造中心996ICU六四事件 20 April 2018 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: