【发布时间】:2017-03-13 00:33:42
【问题描述】:
是否有任何根本原因导致新的 C++17(或更高版本)不允许将 main 编写为其他方式
int main(std::vector<std::string> args){...}
?我知道需要与以前的代码兼容,所以
int main(int, char**)
仍然必须存在,但是有什么技术可以阻止第一个“替代”声明吗?
【问题讨论】:
-
如果这样做,您会遇到每个 C++ 程序都需要了解
std::vector的问题。这是很多额外的麻烦,没有太多好处。无论如何,您始终可以将argv的内容添加到向量中。 -
我不认为有任何技术原因不支持此功能。显然,您可以编写执行此操作的代码,因此运行时也可以代表您执行相同操作。
-
@BrandonIbbotson 和
std::string也是!! -
@Jean-FrançoisFabre 如果你写
main(vector<string>),编译器可以很聪明地添加它们,如果你写main(int, char**),则不添加它们。 C++11/14/17 不鼓励使用原始指针,但当您第一眼看到main函数时就会看到它们。 -
@einpoklum 除了我已经提到的那些之外,我真的没有更多的理由来表达我的观点。我无法确定有多少人可能想要使用
std::vector。对于严肃的命令行工具,我怀疑大多数使用预先编写的参数处理库。对于手写参数处理,我确实经历了将命令行参数传输到std::vector的阶段,但是TBH 并没有比直接使用内置数组更容易。
标签: c++ command-line-arguments main stdvector