在同一个程序中混合宽输出流和窄输出流
在《C Cookbook》中,提到在不应该执行相同的程序。这个评论源于这样一个事实:C 和 C 标准规定流有一个方向,一旦为流设置了这个方向,就不应该混合与该方向不兼容的操作。
什么这在实践中意味着吗?
当第一次调用 cout 或 wcout 时,stdout 的方向被设置。在 cout 的情况下,stdout 成为面向字节的流,而在 wcout 的情况下,stdout 成为面向宽的流。根据 C 标准 [27.4.1] 和 C 标准 [7.19.2],一旦设置了流的方向,您就不应该调用与该流的方向不兼容的函数。
规则的例外
但是,值得注意的是,并非所有编译器都严格遵循此标准。例如,在 Visual C 10.0 中,未实现 fwide 函数(用于设置流的方向)。因此,在 Visual C 中,混合 cout 和 wcout 是允许的。
同样,在 GCC 的早期版本中,由于修复了一个 bug,可以通过调用 std 在同一个程序中调用 cout 和 wcout ::ios::sync_with_stdio(假);
但是,重要的是要记住这些都是规则的例外情况。一般来说,不建议在同一程序中混合宽输出流和窄输出流,因为这可能会导致意外行为或未定义的结果。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3