有效的 C++ main
签名如下:
int main()
int main(int argc, char *argv[])
int main(int argc, char **argv)
但不允许声明main
获取初始化列表:
int main(std::initializer_list<char *> args)
据我所知,初始化列表可以实现为一对指针或一个指针(这可能是 argv
参数)加上一个长度(这可以从 argc
参数推导出来),并且它的存储可以是自动的、临时或静态只读存储器 depending on the situation .
所以我认为 std::initializer_list<char *>
可以毫无问题地处理和管理命令行参数,然后我想知道为什么这个假设 main
在 C++11 标准的初始化列表获得批准后未添加签名,因此我要问:
- 允许初始化列表作为
main
的缺点或问题是什么?只有参数? (我想不出任何)。 - 向标准委员会提出此添加(或任何其他更改)建议的正确方式是什么?
最佳答案
虽然有两种指定main()
的方法在程序中,大多数(全部?)C++ 运行时的当前实现调用 main()
以相同的方式运行(它们将参数作为 (int, char *[])
传递,而不管 main()
是如何声明的)。你的提案需要所有实现的 C++ 运行时来确定哪种类型的 main()
。程序正在使用,调用右边main()
.如果你真的想要这个功能,你总是可以提供 main(int, char *[])
的实现。将参数转换为类似对象的初始化列表(例如 vector<>
),然后调用您选择的新入口点函数。
提交提案的过程在 Standard C++ website 中有描述。 .基本步骤是:(1) 在他们的 Usenet 组/邮件列表中发布想法; (2) 起草提案,征求反馈意见,并据此更新提案; (3) 重复该过程,直到提案被接受。
关于c++ - 为什么初始化列表不能作为main的参数?怎么提议呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099615/