Sev*_*yev 24
我们可以.main不是保留字.但是根据语言标准,C++工具链期望程序的入口点main在全局范围内.因此,main课程内部不会被视为课程的入口点.
随意定义一个名为的类方法main,并从全局调用它main.
这种设计从C开始.与现有C代码的兼容性是C++早期的主要设计目标,改变入口点约定几乎没有任何实际好处.所以他们保持了C标准.就像每个人都说的那样,与Java不同,C++完全允许独立(即非类)功能.
jal*_*alf 24
我们为什么?我们为什么需要?
要使类方法有意义,我们必须有一个对象的实例.在main调用时,我们没有实例.
所以它本来可以成为一个静态成员函数,但重点是什么呢?它是"更加面向对象"吗?怎么会这样?
我认为这是有道理的方式C++做的:main就是你开始之前,你有什么目标,存在的任何实例之前.
在Java中,main是一个静态成员,因为没有别的东西存在.但是在C++中,存在非成员函数,那么为什么不让它们main成为其中之一呢?
Mar*_*k B 10
因为在远远早于类的C中,它main是一个独立的函数,并且在C++中没有改变以保持兼容性.
如果你真的想这样做,没有什么能阻止你编写一个你实例化的类main然后调用一个main方法.
C++ 没有在 C# 和 Java 中发现的要求,即每段代码都属于某个描述的类。C++ 允许独立函数 amdmain属于该类别。
因此不main属于任何阶级。
当然,您可以创建一个包含main函数的类,但这不会是在程序启动时自动调用的主函数:
#include <iostream>
class SomeClass {
public:
SomeClass() {
std::cout << "In SomeClass constructor\n";
}
~SomeClass() {
std::cout << "In SomeClass destructor\n";
}
static int main() {
std::cout << "In SomeClass main\n";
return 0;
}
};
int main() {
std::cout << "In real main\n";
{ SomeClass xyzzy; } // Just to ensure destructor called before main exit.
std::cout << "Exit real main\n";
}
Run Code Online (Sandbox Code Playgroud)
其输出显示main未调用的类变体:
In real main
In SomeClass constructor
In SomeClass destructor
Exit real main
Run Code Online (Sandbox Code Playgroud)