#include <iostream>
int main()
{
main();
std::cout<<"Hello World! "<<std::endl;
return 0;
}
这是代码,它的行为如何?为什么?
那是未定义的行为。您不能从 C++ 程序中调用 main()(标准的第 3.6.1.3 节)。
因此,任何事情都可能发生。并且没有必要问为什么。
main() 函数在 C++ 中调用自身,会发生什么?
任何事情都可能发生,因为它是未定义的行为。但由于程序目前处于静止状态,一些无限递归(最终导致堆栈溢出)似乎是合理的。
您不应该在 main 中调用 main,这是未定义的行为。
§ 5.2.2.9 函数调用
允许递归调用,但名为 main (3.6.1) 的函数除外。
§ 3.6.1
函数 main 不得在程序中使用。main 的链接(3.5)是实现定义的。将 main 定义为已删除或将 main 声明为 inline、static 或 constexpr 的程序是错误的。名称 main 没有保留。[ 示例:成员函数、类和枚举可以称为 main,其他命名空间中的实体也可以。—结束示例]
main()
在 C++ 中,不允许从您的调用。所以这是一个错误。即使取其地址也是错误的。
main()
只有一个入口点。因此,不允许再次调用它。