7 c c++ struct structure class
在C中,每当我们想要声明或定义结构时,我们必须使用结构前缀.但是,一旦结构成为c ++中的一类,事情就会发生变化.我们struct在声明结构时不再需要使用前缀.在这种情况下,我猜结构标签C成为了一个类型的名称C++.
但是,这并不意味着我们不能使用struct前缀.我们仍然可以使用struct前缀.例如,c ++的创建者Bjarne Stroustrup介绍了一个声明带有和不带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;
};
Run Code Online (Sandbox Code Playgroud)
现在,下面是函数声明,其返回类型和参数类型是结构.即使这些与上面没有什么不同,第一个从下面的两个函数声明,一个带结构前缀,给我一个错误的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);
Run Code Online (Sandbox Code Playgroud)
我真的不明白事情是如何运作的.我不明白这些声明之间的区别.谁能给我一个详细的解释?
除了 C 语言之外,在 C++ 中,如果没有歧义,可以省略struct(and ) 关键字。如果存在歧义,您仍然必须使用关键字。一个臭名昭著的例子是 POSIX' :有 a和 a function 。在这里你总是必须使用来引用类型。classstructstatstruct statstatstruct stat