Ответ 1
struct
и class
полностью взаимозаменяемы в отношении форвардных объявлений. Даже для определений они влияют только на спецификатор доступа по умолчанию для членов объектов, все остальное эквивалентно. Вы всегда определяете "классы" объектов.
Единственное место, где struct
должно использоваться над class
, - это когда forward объявляет непрозрачные данные для c привязки.
Относительно вашего редактирования:
Я знаю различия между классом/структурой в отношении public/private по умолчанию, но я спрашиваю конкретно о передовых декларациях и возможных последствиях их замены.
Visual С++ выдает предупреждение C4099. Он делает это, потому что украшение имени для его функций включает ключевое слово, которое вы использовали. Таким образом, программы могут неправильно соединить. Таким образом, совершенно стандартный совместимый код не может ссылаться при использовании VС++ (перемещение кости в части Microsoft, AFAIC).
Обсуждение этого предупреждения, а также почему его можно игнорировать, если вас дисциплинируют, можно найти здесь