为什么我们不将C++ main方法放在类中?

Nir*_*nka 10 c++

在C++中为什么我们不把main方法放在类中(比如Java)?为什么不这样做有意义(我认为)?

Sev*_*yev 24

我们可以.main不是保留字.但是根据语言标准,C++工具链期望程序的入口点main在全局范围内.因此,main课程内部不会被视为课程的入口点.

随意定义一个名为的类方法main,并从全局调用它main.

这种设计从C开始.与现有C代码的兼容性是C++早期的主要设计目标,改变入口点约定几乎没有任何实际好处.所以他们保持了C标准.就像每个人都说的那样,与Java不同,C++完全允许独立(即非类)功能.

  • 链接器并不像语言标准那样需要它. (3认同)

jal*_*alf 24

我们为什么?我们为什么需要?

要使类方法有意义,我们必须有一个对象的实例.在main调用时,我们没有实例.

所以它本来可以成为一个静态成员函数,但重点是什么呢?它是"更加面向对象"吗?怎么会这样?

我认为这是有道理的方式C++做的:main就是你开始之前,你有什么目标,存在的任何实例之前.

在Java中,main是一个静态成员,因为没有别的东西存在.但是在C++中,存在非成员函数,那么为什么不让它们main成为其中之一呢?

  • 我最喜欢这个答案,但我觉得我不能投票,因为你不仅可以在'main`执行之前拥有很多对象,标准规定在`main`之前有一些_must_存在的对象.(`cin`) (5认同)
  • 这不是标准背后的历史思考.`main`(在C中)早于类的概念.在C++中,他们希望与C兼容. (2认同)

Mar*_*k B 10

因为在远远早于类的C中,它main是一个独立的函数,并且在C++中没有改变以保持兼容性.

如果你真的想这样做,没有什么能阻止你编写一个你实例化的类main然后调用一个main方法.


pax*_*blo 6

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)