c++ 为什么main不能是constexpr?

当您尝试使用const与main一样使用constexpr:

constexpr int main()

gcc和cl ang抱怨:

error: cannot declare ‘::main’ to be inline

error: ‘main’ is not allowed to be declared constexpr

让我们看看对constexpr函数有什么要求:

constexpr函数必须满足以下要求:

>它不能是虚拟的
>它的返回类型必须为LiteralType
>其每个参数必须是字面类型

什么是LiteralType?

字面类型是以下任何一种

> void(因为c 14)
>标量类型
>参考类型
>一个文字类型的数组

功能体必须包括什么?

> null语句
> static_assert声明
> typedef声明和不定义类或枚举的别名声明
>使用声明
>使用指令
>只有一个只包含文字值,constexpr变量和函数的return语句。

以下示例:

constexpr int main() { ; }

constexpr int main() { return 42; }

constexpr int main() {
// main defaults to return 0 
}

似乎符合所有这些要求。此外,main是在程序开始之前运行的特殊功能。您可以从main运行constexpr函数,为了将constexpr标记为constexpr,必须在constexpr上下文中运行。

那么为什么main不允许成为一个constexpr?

不,这不允许draft C++ standard在3.6.1节主要功能第3段说:

[…]A program that defines main as deleted or that declares main to be inline, static, or constexpr is ill-formed.[…]

主要是一个运行时功能,因为Lightness says它没有任何意义,因为你不能优化主力。

http://stackoverflow.com/questions/21539744/why-main-can-not-be-a-constexpr

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c++ 为什么main不能是constexpr?