主(或入口点)函数可以作为 lambda 实现吗?
这在最近更新的标准下有效吗?
auto main = [](int argc, char* argv[]) -> int
{
return 0;
};
我最好的猜测是,这取决于 main() 是否必须是一个函数,或者是否允许它是任何可调用的全局作用域符号(使用 ()
)。
Is this valid under the recently updated standard?
auto main = [](int argc, char* argv[]) -> int
{
return 0;
};
My best guess is that it depends on whether main() MUST be a function, or if it is allowed to be any globally scoped symbol that is callable (with ()
).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不可以,
main
必须是全局函数,不能是函数对象或其他任何东西。参见 ISO/IEC 14882:2011 § 3.6.1 主要功能。从第 2 段开始
实现不需要允许任何其他定义。
No,
main
is required to be a global function and cannot be a function object or anything else. See ISO/IEC 14882:2011 § 3.6.1 Main Function.And from paragraph 2
There is no requirement for implementations to allow any other definitions.
不,原因如下:
Lambda 不是函数,而是函数对象或函子:
No, and here's why:
Lambdas are not functions, but function objects or functors:
main() 必须是一个函数,因为它是通过系统库从内部调用的。它是 POSIX.1 标准的一部分,控制 C 链接的工作方式。
主链接必须是外部全局的,它不能内联或静态,因为它是从 libc 内部调用的,通常是从名为 _start 的函数调用的。
例如,glibc 中 _start 的典型实现是:
各种 libc 实现都会以类似的方式执行此操作。
在 C++ 中,main 函数必须在全局范围内声明(即::main();再次因为它是从类似 init 的函数调用的,例如上面 *nix 函数上 libc 的 _start 执行后调用...
main() must be a function because of the way it's called from within with the system libraries . It is part of the POSIX.1 standard and governs the way C linkage works
The main linkage has to be an extern global, it cannot be inlined or made static because it's called from within the libc and typically from a function called _start.
As an example, typical implementation of _start in glibc is:
Various libc implementations will do it in a similar fashion.
In C++ the main function must be declared in the global scope (i.e.) ::main(); again because it is called from an init-like function such as _start for libc on *nix function above after execution...