Pap*_*ter 5 c++ standards program-entry-point initializer-list c++11
有效的C++ main签名如下:
int main()
int main(int argc, char *argv[])
int main(int argc, char **argv)
Run Code Online (Sandbox Code Playgroud)
但是不允许声明main获取初始化列表:
int main(std::initializer_list<char *> args)
Run Code Online (Sandbox Code Playgroud)
AFAIK初始化列表可以实现为一对指针或指针(可以是argv参数)加上一个长度(这可以从argc参数中推导出来),其存储可以是自动,临时或静态只读存储器视情况而定.
所以我认为一个std::initializer_list<char *>可以处理和管理没有任何问题的命令行参数,然后我想知道为什么这个假设的main签名没有在C++ 11标准的初始化列表批准后添加,因为我问:
main唯一参数的缺点或问题是什么?(我想不到任何事).尽管在程序中有两种指定方法main(),但大多数(全部?)C++ 运行时的当前实现都以main()相同的方式调用该函数(它们传递参数,而(int, char *[])不管如何main()声明)。您的建议将要求所有实现的 C++ 运行时找出main()正在使用哪种类型的程序,并调用正确的main(). 如果您确实想要自己使用此功能,您始终可以提供一个实现,main(int, char *[])将参数转换为类似对象的初始值设定项列表(例如vector<>),然后调用您选择的新入口点函数。
标准 C++ 网站描述了提交提案的过程。基本步骤是: (1) 在他们的 Usenet 组/邮件列表中提出这个想法;(2)起草提案,征求反馈意见,并相应更新提案;(3) 重复该过程直至提案被接受。
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |