Есть люди, которые пытаются использовать ключевое слово struct для обозначения различных вещей.Например, некоторые люди пытаются использовать struct
для указания POD-ness или быть только классами данных (классы только с открытыми переменными-членами и без функций).
На мой взгляд, это серьезная ошибка, и всепричины, о которых я слышал, ошибочны.Во-первых, ключевое слово типа struct
недостаточно для выражения условий, которые они пытаются использовать для документирования.Поскольку ключевое слово на самом деле ничего не значит, люди либо соглашаются с этим, либо пытаются утверждать, что оно должно означать.Существует слишком много несовместимых мнений о том, что struct
должно означать в коде, чтобы оно могло документировать любое из них.Вы хотите документировать такие вещи, как «Этот объект всегда должен быть POD», настолько четко, насколько это возможно, вместо того, чтобы полагаться на неясные стандартные детали команды, которые трудно запомнить.Таким образом, для документирования такой вещи, честно говоря, достаточно всего лишь // This object must always be a POD
.Это ясно, просто и не может быть неправильно истолковано любым, кто знает, что такое POD, и это хорошо определено.
Лучший аргумент, который я когда-либо слышал об использовании ключевого слова class
вместо struct
заключается в том, что вы предпочитаете частный доступ к общедоступному доступу, раскрывая только то, что необходимо.Другими словами, тип наследования и доступа по умолчанию должен быть закрытым, пока не будет показано, что необходим больший доступ.Я согласен с этим мнением, но не согласен с тем, что для соблюдения этого принципа необходимо использовать ключевое слово struct.
То, что вы решите, будет довольно произвольным.Причины могут быть позже утверждены, но я считаю, что людей, которые выбрали одно или другое, нелегко убедить.Я переключился с 'class' на 'struct', потому что я прочитал слишком много книг по современному C ++ и слишком много буст-кода;вы редко увидите ключевое слово 'class' в обоих.По правде говоря, это не имеет значения;Следуйте стандартам команды, в которой вы находитесь.По моему мнению, добавление ключевого слова, которое по сути бессмысленно, было ошибкой.
Редактировать: Хотя я должен сказать, что еще одна причина, по которой я не люблю использовать class
, заключается в том, что оно означает слишком много вещей, даже еслиничего не значит конкретно.Например, вы можете использовать class
вместо typename
в спецификациях параметров шаблона.Даже если вы используете ключевое слово class
, вы можете передавать любой тип, но не обязательно какой-либо класс (например, int
).Единственное время, когда мне нравится использовать ключевое слово class
, это когда оно действительно что-то значит и где вам действительно необходимо: указание параметров шаблона шаблона.