有什么区别:
void function();
int main()
{......}
void function()
{......}
Run Code Online (Sandbox Code Playgroud)
VS
void function()
{.......}
int main();
Run Code Online (Sandbox Code Playgroud)
在main之前声明一个函数然后在main之后定义它然后在main之前声明并定义它似乎很奇怪.这是出于审美目的吗?我的老师写的功能就像第一个例子.
注意我的意思是补充这个答案,其他人已经对这个问题给出了很好的答案。
请注意,知道如何在 C++ 中转发声明变得非常重要。一旦你开始使用头文件,它基本上就变成了强制性的。头文件将允许您构建函数和类/结构的原型,然后在相应的 .cpp 文件中定义它们。这是 C++ 的一个非常重要的组织特性。
// MyClass.h
class MyClass
{
public:
MyClass(int x);
void printInt();
private:
int myInt;
};
// MyClass.cpp
MyClass::MyClass(int x)
{
MyClass::myInt = x;
}
void MyClass::printInt()
{
std::cout << MyClass::myInt;
}
Run Code Online (Sandbox Code Playgroud)
以这种方式做事可以使您不必完全编写一大堆代码。特别是如果您正在编写具有大量源代码的真实程序。
因此,虽然在您提出的问题中,提前声明实际上只是一种偏好,但后来它真的不会成为一种选择。
这只是为了代码组织目的(我认为"美学").如果没有前向声明,则需要在使用之前编写每个函数,但是为了组织目的,您可能希望以不同的顺序编写函数体.
使用前向声明还允许您在最顶层提供文件中定义的函数列表,而无需深入了解实现.
在相互递归函数的情况下,前向声明也是必要的.考虑这个(愚蠢的)例子:
bool is_odd(int); // neccesary
bool is_even(int x) {
if (x == 0) {
return true;
} else {
return is_odd(x - 1);
}
}
bool is_odd(int x) {
return is_even(x - 1);
}
Run Code Online (Sandbox Code Playgroud)
您的第一个示例采用自上而下的风格,第二个示例采用自下而上的风格。
这在很大程度上是审美问题,因为有些人更喜欢其中一种。
例如,某人可能更喜欢在获取详细信息(自上而下)之前获得程序的高级概述,而另一个人可能更喜欢首先查看详细信息(自下而上)。
自顶向下方法中的声明的一个明显好处是,您可以更轻松地重新组织函数定义,而不必担心顺序。