Разница между классом и структурой в С++
Давно мучает этот вопрос, ведь, очевидно, что разница не только в том, какой доступ предоставляется по-умолчанию (без модификаторов доступа) к элементам классов и структур. В стандартной библиотеке есть как классы, так и структуры, например, std::array — это структура, а std::vector — класс. Мне кажется, что разработчики стандартной библиотеки руководствовались при выборе чем-то объективным. В других языках структуры отвечают за value type, а классы за reference type, но, как я понимаю, к С++ это не относится.
Ответы (1 шт):
разница не только в том, какой доступ предоставляется по-умолчанию (без модификаторов доступа) к элементам классов
Не только к членам, еще к родителям без модификатора доступа. Другой разницы нет.
Строго говоря, структур в языке вообще нет, и слово struct создает класс.
std::array— это структура, аstd::vector— класс
Выбирают на глазок.
С++ core guidelines (там иногда пишут странные вещи, но здесь я с ними в целом согласен) предлагают два критерия:
C.2: Use
classif the class has an invariant; usestructif the data members can vary independentlyТ.е. если поля можно менять как попало - структура, а если есть какое-то условие на содержимое полей ("инвариант"), за которым тип следит сам - это класс.
C.8: Use
classrather thanstructif any member is non-publicИспользовать класс если хотя бы один член не-публичный, иначе структуру.