【发布时间】:2013-08-05 19:18:53
【问题描述】:
在 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;
};
现在,下面是返回类型和参数类型都是结构的函数声明。尽管这些与上面没有什么不同,但下面两个函数声明中的第一个,带有结构前缀的那个,给我一个 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);
我真的不明白事情是如何运作的。我不明白这些声明之间的区别。谁能给我详细的解释?
【问题讨论】:
-
你在问为什么在 C++ 中可以省略
struct关键字? Why does C need “struct” keyword and not C++? -
你用的是什么编译器?并非所有 C++ 都符合标准。
-
@Blastfurnace 谢谢。但是,我还有一个问题。你给我的链接说如果没有歧义,c ++“允许”省略 struct 关键字。这意味着我们仍然可以使用 struct 关键字。然后我的第二个代码中存在歧义,因为它给了我一个错误。但是,我没有看到任何模棱两可的地方。怎么了?
-
@Anycorn 我正在使用 Visual Studio C++ 2012。
-
使用 g++,两行都可以编译。
标签: c++ c class struct structure