gpt4 book ai didi

c++ - 在 C++ 中使用 sscanf 和 sprintf - 风格

转载 作者:行者123 更新时间:2023-11-28 03:32:14 30 4
gpt4 key购买 nike

我想知道在风格方面,您是否认为在主要是 C++ 的程序中使用这些函数是可以接受的。我问,因为我有一位教授教授 c++ 类(class),其示例充满了 c 字符串、字符串到 c 字符串的转换、sscanf、sprintf 和其他类似的东西。

最佳答案

好吧,这里有一些关于一般流与 stdio 问题的要点可以帮助您做出决定。大多数适用于stringstream vs sprintf/sscanf;只有少数涉及缓冲的非内存流(例如文件、标准输入/标准输出)。

  • 流是类型安全的,所以如果你的程序编译它通常会运行正常,而 stdio 格式字符串与参数和类型的匹配很容易出错并且编译器不需要验证它(尽管有些可以)
  • 如果你最终混合了它们,你需要在你的流中使用 sync_with_stdio 成员 (http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/) -这可能会减慢他们的速度
  • scanfprintf 等的标准 C 版本不允许自定义支持您创建的新类型,这极大地限制并阻碍了您创建和使用多态代码打印不同类型的(例如模板、宏)
    • 像 GNU 这样的一些实现确实有一些定制功能
  • printf/scanf 样式格式字符串可以比 C++ 流式处理更简洁 - 特别是在使用 iomanip 时 - 但更多地取决于对可读性的熟悉程度
  • 大多数第三方 C++ 代码仅具有流式处理能力
  • 在实践中,printf/scanf 通常速度更快,尽管需要在运行时切换到特定于类型的处理,但这是有代价的:它们缺少一些流功能,例如作为特定于语言环境的行为,行为在调用等过程中持续存在。
  • printf/scanf 等有时可用于根据指定格式字符串的配置来改变运行时 I/O 解析(这对于像 GNU 这样的扩展更容易允许您使用数字来引用参数以指示它们在参数列表中的位置,而不必使格式字符串和参数相对应);尽管如此,这仍然是脆弱的(错误经常导致程序崩溃)并且 - 对于经常尝试使用国际化 - 远不如专门为此目的设计的设施那么强大

关于c++ - 在 C++ 中使用 sscanf 和 sprintf - 风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190273/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com