Я читал об одной странной функции C ++ под названием Введенное имя класса Вот.
Я попробовал следующую простую программу
#include <iostream>
class test
{
int s{3};
public:
int get_s()
{ return s; }
};
int main() {
class test::test s; // struct test::test s; also allowed. Why???
std::cout<<s.get_s();
}
Если я заменю учебный класс ключевое слово с структура в первой строке main () программа все еще компилируется & работает нормально. Посмотреть демо Вот. Зачем? Я не должен получить ошибку компилятора? Почему он хорошо компилируется?
Я полагаю, что соответствующий стих находится в 7.1.6.3/3 (выделяя мой, цитируемый здесь из проекта стандарта C ++ 17):
Таким образом, в любом уточненный тип Спецификатор,
enum
ключевое слово должно использоваться для ссылки на перечисление (7.2),union
класс-ключ используется для обозначения союза (пункт 9), и либоclass
или жеstruct
класс-ключ должен использоваться для ссылки на класс (раздел 9), объявленный с использованиемclass
или жеstruct
класс-ключ.
Таким образом, любое ключевое слово может использоваться для определения области действия, в которой существует введенное имя класса, независимо от того, какое из них использовалось для объявления / определения. test
,
Структура и класс почти идентичны в C ++. Единственное отличие состоит в том, что члены структур по умолчанию являются открытыми, а члены классов по умолчанию являются закрытыми.
Смотрите полный ответ здесь: C / C ++ Struct против класса
class test s;
или же
struct test s;
тоже работает
Классы и структуры в C ++ — это практически одно и то же.
Разница в том, что:
struct A{
};
как
class A{
public:
};
а также
class B{
};
как
struct B{
private:
};
Позволяет вам использовать struct
Префикс для совместимости с C, и я думаю, что он распространяется на class
потому что «почему бы и нет?»
Извините, может быть, я неправильно понял ваш пост, но в C ++ нет больших различий между классом и структурой.
Основные отличия, которые я знаю, в том, что по умолчанию в структуре все поля public.
Существует сообщение о различиях между структурой и классом:
Каковы различия между структурой и классом в C ++?