C ++ Struct скомпилирован в класс?

Я работаю на C ++. Я использую MVSV 2010.

Когда я компилирую исходный код и выгружаю макет памяти всего класса с помощью -d1reportAllClassLayout.

Например, я объявляю структуру:

struct my_struct{
int a;
};

И структура памяти struct выглядит следующим образом:

class my_struct size(4):
+---
0   | a
+---

Означает ли это, что компилятор C ++ считает struct такой же, как класс во всем?
(За исключением спецификатора доступа по умолчанию)

Если это так, то как насчет конструктора и деконструктора структуры?

Есть ли конструктор по умолчанию и деконструктор структуры? И это похоже на класс?

Большое спасибо за вашу поддержку,

1

Решение

В C ++ понятие класса определяется следующим образом

class-specifier:
class-head { member-specificationopt}

где руководитель класса в свою очередь определяется как

class-head:
class-key attribute-specifier-seqopt class-head-name class-virt-specifieropt base-clauseopt
class-key attribute-specifier-seqopt base-clauseopt

где

class-key:
class
struct
union

Таким образом, структура является классом с ключом класса struct,

И (C ++ Стандарт 12.1 Конструкторы)

4 Конструктор по умолчанию для класса X — это конструктор класса X, который
можно вызвать без аргумента. Если нет заявленного пользователем
конструктор для класса X, конструктор без параметров
неявно объявлено как дефолт
(8.4). Неявно объявленный
конструктор по умолчанию является встроенным публичным членом своего класса …

Поскольку структура является классом и не имеет объявленного пользователем конструктора, такой конструктор неявно объявляется компилятором.

1

Другие решения

В C ++ класс и структура (почти) одинаковы. Единственная разница между ними заключается в том, что по умолчанию класс private и по умолчанию структура является public

4

Цитировать из Часто задаваемые вопросы Страуструпа

Хорошо разработанный класс представляет простой и понятный интерфейс
пользователи, скрывая свое представление и избавляя своих пользователей от необходимости
знать об этом представлении. Если представление не должно быть
скрытый — скажем, потому что пользователи должны иметь возможность изменять любой элемент данных
как им нравится — вы можете думать об этом классе как опросто старый
структура данных
«; например:

struct Pair {
string name, value; };

Структура — это набор похожих или разнородных типов данных. Классы расширяют охват структур, позволяя включать функции в структуры. Теперь, если структура — это просто набор типов данных, вы, несомненно, можете инициализировать их некоторым значением по умолчанию, таким же, как конструкторы, иначе компилятор сделает это для вас неявно, как указано в ответе Влада, но вам не потребуются какие-либо деструкторы и по умолчанию нет деструкторов.

1

Это может означать, что d1reportAllClassLayout сообщает о них обоих

0
По вопросам рекламы [email protected]