C++ 语句类foo是什么;意思是
我一直在浏览一个项目的代码,遇到了这个语句C++ 语句类foo是什么;意思是,c++,class,pimpl-idiom,C++,Class,Pimpl Idiom,我一直在浏览一个项目的代码,遇到了这个语句 class foo; . . . . foo* f1; 在不同的地方。该类也未在包含的任何标头中声明。谁能告诉我这是什么意思。我想你指的是远期申报。它告诉编译器稍后将定义一个名为foo的类。在此之前,它是一个不完整的类型,这意味着可以定义类的指针和引用。在完全定义该类之前,无法创建该类的实例。您的声明不正确吗?我不确定。。我知道你不能有任何空间名。。也许你漏掉了一个下划线 我相信你的意思是: class foo any_name(); 在这种情
class foo;
.
.
.
.
foo* f1;
在不同的地方。该类也未在包含的任何标头中声明。谁能告诉我这是什么意思。我想你指的是远期申报。它告诉编译器稍后将定义一个名为foo的类。在此之前,它是一个不完整的类型,这意味着可以定义类的指针和引用。在完全定义该类之前,无法创建该类的实例。您的声明不正确吗?我不确定。。我知道你不能有任何空间名。。也许你漏掉了一个下划线 我相信你的意思是:
class foo any_name();
在这种情况下,它正向声明一个名为any_name的函数,该函数返回一个foo的类实例
例如:
#include <iostream>
class foo any_name(); //The forward declaration..
class foo //the foo class implementation.
{
public:
foo(){std::cout<<"hey";}
};
class foo any_name() //The implementation of the function..
{
std::cout<<"any_name";
//return {}; //Can be used to return a constructed instance of foo.
};
int main()
{
any_name();
}
这是一项前瞻性声明。它可以用于类、结构和函数,它告诉编译器这是在别处或以后定义的 对于类,至少有两个用例 1.不需要完整的定义 在转发声明之后,编译器不知道类的大小或成员,只知道名称。这对于指向类的指针和引用就足够了,它们基本上是指针周围的语法糖。但通常指针就足够了,这样就可以避免将整个头文件包含在另一个头文件中。这有助于提高编译速度,因为当一个头更改时,不需要重新编译所有内容 myfuncs.h
class MyClass; // forward declaration
void helpMyClass(MyClass &needy);
// here this would give compiler error about incomplete type:
//void badHelp(MyClass needy); // value needs definition
myfuncs.cpp:
#include "myclass.h" // entire MyClass definition
void helpMyClass(MyClass &needy) {
needy.helpMe(false); // needs full definition
}
这方面的重要用例是所谓的,在这里的so-under-tag中也有详细介绍
2.两个类需要相互引用
在这种情况下,需要向前声明才能很好地工作。我只是想说,如果你在野外看到它,有一种使用void指针和强制转换的丑陋方式,有时在新手程序员不知道该怎么做时使用。虽然这个名字表明了一个例子,但对我来说这看起来像一个例子。这通常用于声明指向类foo的指针,而不必包含类定义本身。
class node; // forward declarion
class collection {
node *frist; // pointer enabled by forward declaration
}
class node {
collection *owner; // already defined above so works too
}