C во встроенных системах традиционно использует структуры для хранения структурированных данных.
Arduino переносит C ++ в таблицу, поэтому мы можем использовать классы.
Допустим, у нас есть две разные структуры данных, которые можно считать очень похожими:
typedef struct
{
int valueOne;
int valueTwo;
int valueThree;
} value_t;
и:
class Value
{
public:
int valueOne;
int valueTwo;
int valueThree;
}
С точки зрения памяти, что это изменит?
Я до сих пор вижу интенсивное использование техники struct - почему это так?
programming
c++
struct
class
Cybergibbons
источник
источник
struct
и кclass
тому же по умолчанию видимости вstruct
s используются главным образом потому, что подавляющее большинство встроенного оборудования написано на C, поэтому любой, кто тратит много времени на написание кода для небольших MCU, вероятно, знает C гораздо лучше, чем C ++, и автоматически достигает идиом C перед идиомами C ++. Это проблема производительности программиста .Ответы:
Как взято из принятого ответа от Когда вы должны использовать класс против структуры в C ++?
С точки зрения памяти модификатор доступа не имеет значения, и учитывая ограничения памяти Arduino, люди с меньшей вероятностью используют классы со сложной иерархией, но в любом случае предпочитают структуры POD.
источник
В отличие от C, экземпляр a
struct
в C ++ является объектом точно так же, как экземпляр aclass
. С точки зрения скомпилированного кода они идентичны. Использование памяти, выравнивание, время доступа и т. Д. Абсолютно одинаковы (т. Е. Нет накладных расходов).С точки зрения программиста, разница очень мала. Члены
struct
имеют публичную видимость по умолчанию, тогда как членыclass
имеют личную видимость по умолчанию. В противном случае все языковые функции работают одинаково для обоих, таких как конструкторы / деструкторы, наследование, полиморфизм, шаблоны и перегрузка операторов. Вы даже можете получитьstruct
из aclass
, и наоборот.Несмотря на сходство, довольно часто можно увидеть, что люди сознательно используют
struct
в C ++ очень простые структуры, например, где он состоит только из нескольких элементов данных, но не функций. Аclass
будет использоваться для чего-то более сложного. Это просто вопрос соглашения или личного предпочтения, и может использоваться как тонкое указание на предполагаемую сложность конструкции.источник
Как указывалось в других ответах, ваша конкретная
struct
иclass
неразличимая производительность (с точки зрения того, как вы определили свою структуру), имеют небольшие различия в объемах имен типов. Разграничение в C ++ не междуstruct
иclass
, а между типами, которые являются POD (обычные старые данные) и типами, которые не являются, как объяснено в этом обсуждении .источник
Никто. Структуры и классы - это одно и то же, различающиеся только уровнями защиты, а создание экземпляров либо создает «объект».
Меньше печатать, если вы не пытаетесь скрыть данные членов.
источник
Обратите внимание, что
устарел в C ++, и вы должны просто использовать
В ответах не очень ясно, но другой эффект структур - публичное наследование по умолчанию против частного наследования по умолчанию с классами.
Как уже упоминалось, использование struct обычно является соглашением для типов POD.
Также технически «структура против объекта» должна быть «структура против класса» (так как создание экземпляра структуры или класса все еще дает объект).
источник