c++ 中的前向声明是什么?

发布于 2024-10-16 07:08:15 字数 371 浏览 3 评论 0原文

这个答案说:

…最后,

typedef struct { ... } Foo;

声明一个匿名结构并为其创建一个 typedef。因此,对于此构造,它在标记命名空间中没有名称,只有 typedef 命名空间中的名称。这意味着它也不能被提前声明。如果你想进行前向声明,你必须在标签命名空间中给它一个名称。

什么是前向声明?

This answer says:

… Finally,

typedef struct { ... } Foo;

declares an anonymous structure and creates a typedef for it. Thus, with this construct, it doesn't have a name in the tag namespace, only a name in the typedef namespace. This means it also can't be forward-declared. If you want to make a forward declaration, you have to give it a name in the tag namespace.

What is forward declaration?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

ら栖息 2024-10-23 07:08:15

查德在字典中给出了一个很好的定义。 C++ 中经常使用前向声明来处理循环关系。例如:

class B; // Forward declaration

class A
{
    B* b;
};

class B
{
    A* a;
};

Chad has given a pretty good dictionary definition. Forward declarations are often used in C++ to deal with circular relationships. For example:

class B; // Forward declaration

class A
{
    B* b;
};

class B
{
    A* a;
};
源来凯始玺欢你 2024-10-23 07:08:15

“在计算机编程中,前向声明是程序员尚未给出完整定义的标识符声明(表示类型、变量或函数等实体)。”

-维基百科

"In computer programming, a forward declaration is a declaration of an identifier (denoting an entity such as a type, a variable, or a function) for which the programmer has not yet given a complete definition."

-Wikipedia

留蓝 2024-10-23 07:08:15

据我所知,在 C++ 中 “前向声明”一词用词不当。它只是一个声明,使用了一个奇特的名称。

To the best of my knowledge, in C++ the term "forward declaration" is a misnomer. It's simply a declaration under a fancy name.

等待我真够勒 2024-10-23 07:08:15

前向声明在实际定义之前声明标识符(将其放入命名空间中)。如果需要在定义结构之前使用指向结构的指针,则需要向前声明结构。

在您链接的答案的上下文中,如果您有 typedef struct {...} Foo;,则不能在结构内部或 typedef 语句结束之前使用指向 Foo 的指针。

另一方面,您可以 typedef struct tagFoo Foo; 以及稍后的 struct tagFoo {...};

A fowrard declaration declares the identifier (puts it in a namespace) before the actual definition. You need forward declaration of structs if you need to use a pointer to the struct before the struct is defined.

In the context of the answer you linked, if you have typedef struct {...} Foo;, you cannot use a pointer to Foo inside the struct or before the end of the typedef statement.

On the other hand you can typedef struct tagFoo Foo; and later struct tagFoo {...};

紫瑟鸿黎 2024-10-23 07:08:15

当类成员使用其中另一个类的引用时,需要前向声明。例如:

class AB; // forward declaration
class A {
public:
    int j; 
    void sum(AB a) {
        return a.i + j;
    }
};
class AB{
public:
    int i;
};

Forward declaration is needed when a class member uses a reference of another class in it. E.g.:

class AB; // forward declaration
class A {
public:
    int j; 
    void sum(AB a) {
        return a.i + j;
    }
};
class AB{
public:
    int i;
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文