Как известно, struct
и class
взаимозаменяемы во многих местах языка. Смутно, сами ключевые слова не обязательно соответствуют языку, используемому в стандарте. Например, в проекте стандарта N4567 [класс]/10,
Структура POD 109 - это неединичный класс, который является одновременно тривиальный класс и класс стандартного макета и не имеет нестатических данных члены типа non-POD struct, не-POD-соединение (или массив таких типов). Аналогичным образом, союз POD представляет собой объединение, которое является тривиальным класс и класс стандартного макета, и не имеет нестатических элементов данных типа не-POD-структуры, не-POD-соединение (или массив таких типов). A POD class - это класс, который является либо структурой POD, либо объединением POD.
В более упрощенных терминах struct
и class
взаимозаменяемы в следующих случаях:
- объявление класса
- объявление типа перечисленной области
- специфицированный спецификатор типа, если только "класс" был объявлен с помощью
union
Однако struct
явно не может использоваться в объявлении шаблона для введения параметров шаблона типа:
template <struct T> // error
Я не вижу существенной разницы между struct
и class
, даже в примере POD выше, потому что структура POD, определенная в стандарте, может быть объявлена с помощью struct
или class
.
[класс]/8 Структура стандартного макета - класс стандартного макета определяемый структурой класса или классом класса. Стандартное макетное соединение - это класс стандартного макета, определенный с помощью объединения классов классов.
Это кажется излишним и запутанным, вводя вопиющую несогласованность.
У меня есть два вопроса:
-
Существуют ли какие-либо технические отличия, которые я пропустил, что значительно отличает
struct
иclass
? -
Каково обоснование, если таковое имеется, за этой неуклюжесть?
Я игнорирую разницу между спецификаторами доступа по умолчанию, потому что все это уже знают.