C ++: Когда я должен использовать структуры вместо классов и где различия в скорости? - PullRequest
22 голосов
/ 03 ноября 2010
  • Когда я должен использовать struct вместо класса?В настоящее время я использую классы для всего, от оболочек текстур OpenGL до растровых шрифтов.

  • Это класс, который я использую так же, как struct (без использования наследования, полиморфизма и т. Д..) все еще медленнее, чем struct?

Ответы [ 5 ]

36 голосов
/ 03 ноября 2010

Структуры и классы в C ++, как вы, наверное, знаете, отличаются исключительно уровнем доступа по умолчанию (и доступностью по умолчанию для их баз: public для struct, private для class).

Некоторые разработчики, включая меня, предпочитают использовать структуры для POD-типов , то есть со структурами в стиле C, без виртуальных функций, баз и т. Д. Структуры не должны иметь поведения - они просто совокупность данных, помещенных в один объект.

Но это, естественно, вопрос стиля, и, очевидно, ни один не медленнее

14 голосов
/ 03 ноября 2010

1) Между этими двумя нет реальной разницы, за исключением того, что члены структуры по умолчанию общедоступны, когда классы являются частными.* Изменить: имейте в виду, что вы можете использовать виртуальное наследование со структурами.Они ТОТ идентичны:)

7 голосов
/ 03 ноября 2010

Вместо того, чтобы удешевлять и ссылаться на другие вопросы, я повторю то, что сказали другие, прежде чем добавить к ним.

struct и class идентичны в C ++, единственномИсключением является то, что struct имеет доступ по умолчанию public, а class имеет доступ по умолчанию private.Поддержка производительности и языковых возможностей идентична.

Идиоматически, однако, 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);
1 голос
/ 22 октября 2013

Мне нравится использовать классы, когда мне нужен явный деструктор. Потому что тогда вы должны следовать правилу трех, и в этом случае вам нужно написать конструктор копирования и перегрузчик присваивания. При всем этом кажется более естественным использовать класс, чем структуру.

1 голос
/ 03 ноября 2010

, как объяснили другие, это то же самое, за исключением уровней доступа по умолчанию.

единственная причина, по которой классы могут восприниматься медленнее, заключается в том, что хороший стиль (но не единственный)упомянутый АрменЦирунян : struct для типов POD, class для полноценных классов объектов.Последние обычно включают в себя наследование и виртуальные методы, следовательно, vtables, которые немного медленнее, чем прямые функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...