23 c++ program-entry-point command-line-arguments
我试图使用main()
函数参数创建一个通过命令行获取参数的程序.作为一个(基本的)C++程序员(即使我非常熟悉C风格的指针和数组),我几乎没有使用过char*
字符串和C数组.我花了一些时间来接受main()
论证并将其转换为std::string
......所以问自己:为什么在C++中main()
函数不会超载std::vector<std::string> argv
而不是旧的char* argv[]
?
对于"重载",我的意思是main()
函数的共存,int main()
而int main(int argc, char *argv[])
不是程序员对正常函数的重载.
Nic*_*las 30
为什么不在标准中?简单:
因为没有人提出它.
事情进入C++标准,因为有人为它写了一个提案,然后让其他人投票并合并它.除非有人真的希望它发生,否则它不会发生.
考虑到这个功能真正的微不足道:
int main(int argc, char **argv)
{
std::vector<std::string> args(argv, argv + argc);
...
}
Run Code Online (Sandbox Code Playgroud)
没有任何真正需要它.这是一种便利功能,与替代方案相比,它甚至不会使方便.
iam*_*ind 18
为什么在C++中main()函数没有重载来获取std :: vector argv而不是旧的char*argv []
因为这需要依赖于<string>
库.C++的理念始终是"不为你不使用的东西买单 ".如果有人不想要提供自动内存管理,string
则无法执行.
第二种观点:如果某个平台没有任何库支持,那么你就无法启动你的C++程序!
相反,int
和char**
参数均内置和独立的类型.人们总是可以编写自定义包装器,main()
它可以完全满足需要.
编辑:关于AProgrammer的评论:
假设main(vector<string>)
是允许的; 然后,如果平台符合所有C++功能,但没有标准库支持,那么它将变得非标准兼容.