7

在 C 中,每当我们想要声明或定义一个结构时,我们都必须使用结构前缀。但是,一旦结构成为 C++ 中的一种类,情况就发生了变化。struct当我们声明一个结构时,我们不再需要使用前缀。在这种情况下,我猜结构标签 inC变成了 in 类型的名称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;
};

现在,下面是函数声明,其返回类型和参数类型是结构。尽管这些与上面没有什么不同,但下面两个函数声明中的第一个,一个带有结构前缀的,给我一个 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);

我真的不明白事情是如何运作的。我不明白这些声明之间的区别。谁能给我一个详细的解释?

4

2 回答 2

3

Other than in C, in C++ the struct (and class) keyword may be omitted, if there is no ambuiguity. If there is ambiguity, you still have to use the struct keyword. A notorious example is POSIX' stat: there is a struct stat and a function stat. Here you always have to use struct stat to refer to the type.

于 2013-08-05T21:55:23.207 回答
-1

当您自己解释时,您似乎确实理解得很好。在 C++ 中,关键字 struct 与关键字 class 相同,但默认为 public 而不是 private 成员。因此,使用 struct 关键字声明了一个类后,您在引用该类时就不会再次使用它。您似乎正在尝试使用 struct ,因为它将在第一个示例中的 C 中使用。这对于 C++ 来说是不同的。

于 2013-08-05T19:23:44.367 回答