是什么原因C++没有将`std :: vector <std :: string>`"overload"作为参数添加到`main()`中?

vso*_*tco 2 c++ program-entry-point stdvector command-line-arguments

是否有任何根本原因新的C++ 17(或更高版本)将不允许写的另一种方式main

int main(std::vector<std::string> args){...}
Run Code Online (Sandbox Code Playgroud)

?我知道需要与以前的代码兼容,所以

int main(int, char**) 
Run Code Online (Sandbox Code Playgroud)

仍然必须存在,但是有什么技术可以阻止第一个"替代"声明吗?

Che*_*Alf 7

以下是如何做到这一点你自己,平凡中的代码非常几行:

auto my_main( std::vector<std::string> const& args ) -> int;

auto main( int n_args, char** args )
    -> int
{ return my_main( std::vector<std::string>( args, args + n_args ) ); }
Run Code Online (Sandbox Code Playgroud)

Modulo符号我相信这个approch在Accelerated C++书中有所介绍,即它是众所周知的.

一个人不需要将其添加到标准中:那些发现它有用的人可以只复制并粘贴代码.

其他人可能觉得它没有用:它在Windows中不能很好地工作,因为按照惯例,main参数在Windows中不是Unicode,而且Microsoft setlocale明确不支持UTF-8语言环境.