主(或入口点)函数可以实现为lambda吗?

Mic*_*ice 8 c++ lambda program-entry-point c++11

这是否在最近更新的标准下有效?

auto main = [](int argc, char* argv[]) -> int
{
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

我最好的猜测是它取决于main()必须是一个函数,还是允许它是可调用的任何全局范围符号(with ()).

bam*_*s53 14

不,main需要是一个全局函数,不能是函数对象或其他任何东西.参见ISO/IEC 14882:2011§3.6.1主要功能.

程序应包含一个名为main的全局函数,它是程序的指定开始.

并从第2段

所有实现都应允许以下两个主要定义:

int main() { /* ... */ }

int main(int argc, char* argv[]) { /* ... */ }

不要求实现允许任何其他定义.

  • 标准的引用会使答案更好:)特别是你知道确切的部分. (2认同)

Lig*_*ica 7

不,这就是原因:

[n3290: 3.6.1/1]: 程序应包含一个名为main的全局函数,它是程序的指定开始.实现定义是否需要独立环境中的程序来定义主函数.[ 注意:在独立环境中,启动和终止是实现定义的; startup包含具有静态存储持续时间的命名空间作用域对象的构造函数的执行; 终止包含具有静态存储持续时间的对象的析构函数的执行. - 尾注 ]

Lambda不是函数,而是函数对象或函子:

[n3290: 5.1.2/3]: 的类型的λ-表达(这也是封闭的对象的类型)是一个唯一的,不连无名 类类型 -称为闭合类型 -其特性如下所述.[..]