命令提示符和 PowerShell 中 运行 C++ 程序的区别

Difference in running C++ program in command prompt and PowerShell

在 C 和 C++ 命令行程序中,运行您的程序在命令提示符下或在 PowerShell 中有什么不同吗? (例如:异常处理、I/O速度等)

程序本身只是一个进程,如何启动它并不重要。

显着的区别是,虽然两个控制台都将自己连接到进程的标准输入和输出流,但每个人在渲染时都有自己的性能,因此 IO 调用可能或多或少受此影响。

从技术上讲,控制台只是一个调用您的程序并以图形方式显示您的输出(和其他内容)的程序。

主要区别:

  • cmd.exe 提供真正的 binary(字节流)管道,因此>,重定向运算符,可以捕获外部程序的原始字节输出。

  • PowerShell,从版本 7.2 开始,只使用 text(字符串)与外部程序通信,无论是在内部还是在输出,这意味着外部程序输出总是被解码为 .NET 字符串,这具有以下含义:

    • 即使仅使用 PowerShell 的 > 运算符将外部程序的输出发送到文件,外部程序输出的每一行都首先被 解码 转换为 .NET 字符串,然后在保存到目标文件时,再次 编码 ,在本例中使用 Out-File cmdlet 的默认编码,>运算符是.

      的有效别名
      • Windows PowerShell 中,(特定于 cmdlet 的)编码是 UTF-16LE(“Unicode”),而在 PowerShell(Core ) 6+,它是无BOM的UTF-8,在该PowerShell版本中一致使用的编码。
    • 这个解码-重新编码循环不仅减慢速度,而且还意味着:

      • 对于 text 输出,输入字符编码(从外部程序解码)可能与 PowerShell 输出的字符编码不同。

      • 二进制输入和输出根本不受支持.

        • 最简单的解决方法是用cmd /c ...(在Windows)委托给cmd.exe,用sh -c ...(在类 Unix 平台上。
    • 有关详细信息,请参阅