main 是否允许使用占位符返回类型?

问题描述 投票:0回答:1

以下内容在 C++14 中有效吗?

auto main()
{
    // ...
}

即使我们不需要使用显式的

int
,返回类型是否会推导为
return 0;

c++ c++14 return-type-deduction
1个回答
23
投票

不,这是不允许的。 C++14 标准草案 N3690 第 7.1.6.4/10 段规定:

如果具有使用占位符类型的声明返回类型的函数没有

return
语句,则返回 类型是从函数右大括号处没有操作数的
return
语句推导出来的 身体。 [...]

这意味着在

return
中省略
main()
语句将使其类型为
void

第 3.6.1/5 段引入的关于从

main()
末端流出的特殊规则规定:

[...] 如果控制到达终点

main
,如果没有遇到
return
语句,效果就是执行

return 0;

该措辞表示程序执行期间的“效果”与存在

return 0
相同,而不是在程序中添加
return
语句(这会影响根据类型推导)引用的段落)。

编辑:

为此有一份缺陷报告由 Johannes Schaub 提供):

拟议决议(2013 年 11 月):

将 3.6.1 [basic.start.main] 第 2 段更改如下:

实现不应预定义主函数。该函数不得超载。它应具有 int 类型的声明返回类型,但除此之外,其类型是实现定义的。 所有实现 实现应允许两者

  • ()
    返回
    int
  • 的函数
  • int
    ,指向
    char
    的指针)的函数返回
    int

作为类型...

© www.soinside.com 2019 - 2024. All rights reserved.