如果您认为在主要使用c ++的程序中使用这些函数是可以接受的,那么我想知道事物的风格方面。我问,因为我有一位教授教授一个c ++类,其中的例子充满了c-strings,字符串到c-string转换,sscanf,sprintf和其他类似的东西。
答案 0 :(得分:2)
嗯,这里有一些关于一般流与stdio问题的几点可以帮助你做出决定。大多数适用于stringstream
vs sprintf
/ sscanf
;一些仅涉及缓冲的非内存流(例如文件,stdin / stdout)。
sync_with_stdio
成员(http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/) - 这可能会降低速度他们失落了scanf
,printf
等不允许自定义支持您创建的新类型,这极大地限制了您并且无法创建和使用多态代码(例如模板,宏)打印不同的类型
printf
/ scanf
样式格式字符串可以比C ++流更简洁 - 特别是在使用iomanip时 - 但更多地依赖于熟悉性以便于阅读printf
/ scanf
通常更快,尽管需要将运行时切换到特定于类型的处理,但这需要付出代价:它们缺少某些流功能,例如特定于语言环境的行为,贯穿电话的行为等等。printf
/ scanf
等有时可用于根据指定格式字符串的配置来改变运行时I / O解析(对于像GNU这样允许引用参数的扩展,这更容易使用数字来表示它们在参数列表中的位置,而不是必须使格式字符串和参数对应);仍然,这是脆弱的(错误经常使程序崩溃)和 - 经常尝试使用国际化 - 不如专门为此目的设计的设施能力