在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.前向声明只是一种“声明”2.为什么前向声明在C++中是必要的编译器想要确定没有拼写错误,并且传递给函数的参数也是对的,因此编译器要求在调用任何函数之前,必须首先看到该函数的声明。简而言之,任何变量或函数等,都是要求先声明再使用。 3.前向声明和定义之间的区别函数声明需要提供返回类型,调用约定,方法名,参数以及参数类型,而定义要求有代码实现。 4.前向声明能显著缩短编译链接时间通过使用 #include一些含有函数声明的头文件, 你可以将函数声明加到你的当前 .cpp文件或 .h文件中,然而,这会拖慢编译时间。尤其是如果在.h文件中#include 头文件时,这是因为,任何#include你写的.h文件的文件,结局是都将#include你所#include的头文件,编译器一下子需要编译无穷无尽的文件,即使需要调用的实际上只有一两个函数。 5.当两个定义互相使用对方时,打破循环除此之外,实现前向声明可以打破循环。这种情况是,两个函数试图互相调用对方。如果出现这种情况,可以#include一个头文件,但是那个头文件又试图#include你目前正在写的文件,两个文件互相#include, 可以使用前向声明解决这个问题。即一个文件使用前向声明,另一个文件使用 #include。 举例: 文件Car.h: // File Car.h #include "Wheel.h" // Include Wheel's definition so it can be used in Car. #include <vector> class Car { std::vector<Wheel> wheels; }; 但是对于头文件 Wheel.h, 必须提供Car 的声明,原因是因为类Wheel含有一个指向Car的指针,但是不能在文件 Wheel.h 中包含Car.h,如果包含,将产生编译错误。如果Wheel.h 包含 Car.h, Car.h 又会包含 Wheel.h, Wheel.h 又会包含Car.h, 如此将陷入不断的循环中,所以编译器没有这样做,而是引发了一个错误。 // File Wheel.h class Car; // forward declaration class Wheel { Car* car; }; 如果类 6 另一个例子相对简单的例子, 两个文件 main.cpp 和 add.cpp, 使用前向声明,不包含头文件,一样可以编译通过: // add.cpp: int add(int x, int y) { return x + y; } // main.cpp: #include <iostream> int add(int x, int y); // 前向声明 int main() { std::cout << "The sum of 3 and 4 is " << add(3, 4) << std::endl; return 0; } [1] https://stackoverflow.com/questions/4926105/what-is-forward-declaration-in-c
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论