c++ - 为什么初始化列表不能作为main的参数?怎么提议呢?

标签 c++ c++11 standards program-entry-point initializer-list

有效的 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/

相关文章:

c++ - CGAL 二维德劳内三角剖分 : How to get edges as vertex id pairs

c++ - C++1y标准是否考虑过支持coroutine/goroutine?

c++ - 我得到 "void value not ignored as it ought to be"我该怎么办?

c++ - less 如何接管控制台?

c++ - 如何判断头文件包含在哪里?

c++ - 大类型的 const T& 和简单类型的 T 的特化模板

c++ - 存储 std::chrono::duration 作为成员的类?

c++ - 异步运行的函数的返回类型应该是什么

c++ - C 和 C++ 标准中 "expression"的定义

c++ - 一个尾数下标的明显规范不足:对于原始数组和 std::vector。已经果断解决了吗?