Обменный класс & amp; ключевое слово struct в переполнении стека

Я читал об одной странной функции 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 () программа все еще компилируется & работает нормально. Посмотреть демо Вот. Зачем? Я не должен получить ошибку компилятора? Почему он хорошо компилируется?

1

Решение

Я полагаю, что соответствующий стих находится в 7.1.6.3/3 (выделяя мой, цитируемый здесь из проекта стандарта C ++ 17):

Таким образом, в любом уточненный тип Спецификатор, enum ключевое слово должно использоваться для ссылки на перечисление (7.2), union класс-ключ используется для обозначения союза (пункт 9), и либо class или же struct класс-ключ должен использоваться для ссылки на класс (раздел 9), объявленный с использованием class или же struct класс-ключ.

Таким образом, любое ключевое слово может использоваться для определения области действия, в которой существует введенное имя класса, независимо от того, какое из них использовалось для объявления / определения. test,

5

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

Структура и класс почти идентичны в C ++. Единственное отличие состоит в том, что члены структур по умолчанию являются открытыми, а члены классов по умолчанию являются закрытыми.

Смотрите полный ответ здесь: C / C ++ Struct против класса

1

class test s;
или же
struct test s; тоже работает

Классы и структуры в C ++ — это практически одно и то же.

Разница в том, что:

struct A{
};

как

class A{
public:
};

а также

class B{
};

как

struct B{
private:
};

Позволяет вам использовать struct Префикс для совместимости с C, и я думаю, что он распространяется на class потому что «почему бы и нет?»

-1

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

Существует сообщение о различиях между структурой и классом:
Каковы различия между структурой и классом в C ++?

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