鉴于您正在构建一个Windows独占程序,为什么对system()
的调用如此讨厌?自从我开始用C ++编程以来,“不要触摸系统”是我听到的非常多的东西。我温顺地遵守了这个原则,但它有什么不好呢?
答案 0 :(得分:6)
您在系统调用中添加的内容取决于您将运行该程序的操作系统。所以它完全不便携。此外,很多事情都可能出错,因为你只是将命令抛入虚空,并希望一切都会好起来的。错误处理(例如 - 您要运行的程序不存在,或者PATH设置不正确,或者您没有权限等)非常困难甚至不可能。
除此之外,正如大多数时候的评论中所指出的那样(真的“最”,如99.999%),不需要使用system
。
答案 1 :(得分:5)
std::system()
要求您信任该命令以执行您想要的操作。您无法验证此假设是否合理。例如,PATH环境变量的异常值可能导致执行与标准设置不同的程序。
对std::system()
的调用行为取决于系统。即使目前的要求是,应用程序不需要在其他操作系统上运行,此要求也可能会发生变化。考虑到std::system()
通常用于可以以更便携的方式实现的目的(特别是初学者),因此不需要在此引入平台依赖性。
答案 2 :(得分:1)
system()
将OS的命令解释程序作为一个单独的进程调用。更多的时候,有一些本机API可以直接在调用过程中完成相同的结果,并且可以更好地控制它。