В C мы должны использовать префикс структуры всякий раз, когда хотим объявить или определить структуру. Тем не менее, все изменилось после того, как структура стала своего рода классом в C++. Когда мы объявляем структуру, нам больше не нужно использовать префикс struct
. В этом ключе, я думаю, что тег структуры в C
стал названием типа в C++
.Я не могу понять объявление структуры в C++
Однако это не означает, что мы не можем использовать префикс struct
. Мы все еще можем использовать префикс struct
. Например, Bjarne Stroustrup, создатель C++, представляет пример объявления структуры как с префиксом struct
, так и без него, что вызывает у меня недоумение.
Ниже приведены определения структуры, которые пытаются создать структуру с аргументом шаблона T. Они компилируются в точности без ошибок.
template<class T> struct linked_list {
T element;
linked_list<T> *next;
};
template<class T> struct linked_list {
T element;
struct linked_list<T> *next;
};
Ниже представлены объявления функций, тип возвращаемого типа и тип аргумента которых являются структурами. Даже если это не то, что отличается от вышесказанного, первый один из ниже двух объявлений функций, то одна с префиксом STRUCT, дает мне ошибку с Visual Studio C++ 2012
template<class T> struct linked_list<T> *add_list(T element, struct linked_list<T> *tail);
template<class T> linked_list<T> *add_list(T element, linked_list<T> *tail);
Я действительно не понимаю, как все работает. Я не понимаю различий между этими декларациями. Может ли кто-нибудь дать мне подробное объяснение?
Вы спрашиваете, почему вы можете опустить ключевое слово 'struct' в C++? [Почему C требуется ключевое слово «struct», а не C++?] (Http://stackoverflow.com/questions/8422775/why-does-c-need-struct-keyword-and-not-c) – Blastfurnace
Какой вы компилятор с помощью? Не все C++ соответствуют стандартам. – Anycorn
@Blastfurnace Спасибо. Однако у меня все еще есть вопрос. Ссылка, которую вы мне дали, говорит, что если нет двусмысленности, то C++ «допускает» отсутствие ключевого слова struct. Это означает, что мы все еще можем использовать ключевое слово struct. Затем следует, что в моих вторых кодах есть двусмысленность, потому что это дает мне ошибку. Однако я не вижу никакой двусмысленности. Что не так? – isbae93