-
Когда следует использовать
struct
вместо класса? В настоящее время я использую классы для всего, от оберток текстур OpenGL до растровых шрифтов. -
Являюсь классом, который я использую так же, как
struct
(не применяя наследование, полиморфизм и т.д.) еще медленнее, чемstruct
?
С++: Когда следует использовать структуры вместо классов и где есть различия в скорости?
Ответ 1
Структуры и классы в С++, как вы знаете, отличаются только уровнем доступа по умолчанию (и доступностью по умолчанию для их баз: public для struct, private для класса).
Некоторые разработчики, включая меня, предпочитают использовать структуры для POD-типов, то есть с C-образными структурами, без виртуальных функций, баз и т.д. Структуры должны не имеют поведения - это всего лишь компромисс данных, помещенных в один объект.
Но это, естественно, вопрос стиля и, очевидно, не медленнее
Ответ 2
1) Нет никакой реальной разницы между двумя другими, кроме того факта, что члены структуры по умолчанию являются общедоступными, если классы являются закрытыми.
2) Нет, это ТОЧНО то же самое.
Изменить: помните, что вы можете использовать виртуальное наследование с помощью структур. Они ТАКИЕ:)
Ответ 3
Вместо того, чтобы дешевле и ссылаться на другие вопросы, я буду повторять то, что говорили другие, прежде чем добавлять к ним.
struct
и class
идентичны в С++, единственным исключением является то, что struct
имеет доступ по умолчанию к public
, а class
имеет доступ по умолчанию для частного доступа. Поддержка производительности и языка идентична.
Идиоматически, однако, struct
в основном используется для "немых" классов (plain-old-data). class
используется больше для воплощения истинного класса.
Кроме того, я также использовал struct
для локально определенных объектов функции, таких как:
struct something
{
something() : count(0) { }
void operator()(int value) { std::cout << value << "-" << count++ << "\n"; }
int count;
} doSomething;
std::vector<int> values;
...
std::foreach(values.begin(); values.end(); doSomething);
Ответ 4
как объяснили другие, это одно и то же, за исключением уровней доступа по умолчанию.
единственная причина, по которой занятия могут восприниматься медленнее, - это то, что хороший стиль (но не единственный) - это тот, который упоминается АрменТсирунян: struct
для типов POD, class
для полнофункциональных классов объектов. Последние обычно включают наследование и виртуальные методы, поэтому vtables, которые немного медленнее, чем прямые функции.
Ответ 5
Мне нравится использовать классы, когда мне нужно иметь явный деструктор. Потому что тогда вы должны следовать правилу три, и в этом случае вам нужно написать конструктор копий и перегрузщик назначений. При этом более естественно использовать класс, чем структуру.