为什么C++中的main()没有重载使用std :: string?

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)

没有任何真正需要它.这是一种便利功能,与替代方案相比,它甚至不会使方便.

  • 我总是在这里听C++程序员停止在C++中使用`char []`&`char*`&use`std :: string`.那为什么到目前为止还没人提出呢? (3认同)

iam*_*ind 18

为什么在C++中main()函数没有重载来获取std :: vector argv而不是旧的char*argv []

因为这需要依赖于<string>.C++的理念始终是"不为你不使用的东西买单 ".如果有人不想要提供自动内存管理,string则无法执行.
第二种观点:如果某个平台没有任何库支持,那么你就无法启动你的C++程序!

相反,intchar**参数均内置和独立的类型.人们总是可以编写自定义包装器,main()它可以完全满足需要.

编辑:关于AProgrammer的评论:
假设main(vector<string>)是允许的; 然后,如果平台符合所有C++功能,但没有标准库支持,那么它将变得非标准兼容.

  • 如果允许`int main(std :: vector <std :: string>)`而不阻止`int main(int,char**)`的可能性只会在你使用_哲学时打破_pay? (16认同)
  • 好吧,我想说一个缺少标准库的实现首先不符合标准(因此没有C++实现).但我完全理解你的论点,即不将依赖项引入非内置类型,即使这些类型是标准提供的.无论如何,作为第一个从更基本的"为什么是这样的标准"来处理这个问题的人 - 而不是"为什么它不起作用" - 而不是其他的回答者. (4认同)
  • @AProgrammer:实际上标准允许实现为'main`添加*新的有效选项,只要它仍然允许标准中定义的两个选项. (3认同)
  • @delnan:比这更棘手.有些编译器没有标准的库实现,你需要提供一个.在某些情况下,编译器附带标准库的实现,但您不想使用它(在我的工作室中,我们使用自己的调整标准库,电子艺界和其他一些......).不是说它无法完成,但是编译器必须阅读*your*includes并使用任何标题*你必须生成一个蹦床函数,你可以在一个单独的班轮中自己编写. (3认同)
  • @iammilind:"*考虑实时系统,它不能保证有很多标准库*"然后你已经*没有处理符合标准的C++环境了.因此,如果不实现`vector <string>``main`选项,那么它的标准就会略逊一筹. (2认同)