在C ++中,std :: cout和fprintf之间的根本区别是什么?一个比另一个更好或更快速吗?


回答 1:

使用std :: cout时,在参数上调用重载的运算符<<,而使用fprintf则将参数转换为字符串。两者背后的基本逻辑仍然相同。

启用同步后,cstdio会更快,但是iostream会变得更快,并且在某些情况下,如果禁用两者之间的同步,速度会快得多。在良好的C ++代码中,仅应使用iostream,因此可以通过调用std :: ios :: sync_with_stdio(false)禁用同步。

注意

与流行的看法相反,如果C ++库和C库都存在相同的功能,则由于编译器的优化,C ++实现几乎总是更好的。


回答 2:

是的,std :: cout更好。这是一个std :: ostream,也是std :: stringstream,它与称为sprintf的printf变体相似。

printf有几个问题。

  1. 它使用格式字符串不仅指定如何打印其余参数,还指定那些类型是什么(不涉及类型系统),因此编译器不知道您所要事物的类型。印刷。为了解决此问题,较新的C和C ++编译器尝试在编译时解释此字符串,这是对该函数的特殊处理。没有函数应该被特别对待。它使用了varargs,它会删除类型,因此问题1十分必要,而本来就不是。

与std :: cout一样,std :: ostream也为要打印的每种类型定义了<<操作符,其中大多数可以调用其原始类型的<<操作符来完成此任务。每个<<操作符函数都知道其打印的类型,并且在编译时完全是类型安全的,因此,基于std :: ostream不会基于格式字符串将足够的参数传递给printf的运行时问题不再是问题。需要格式字符串。

速度差异完全取决于实现,但是std :: cout通过内联具有比printf更快的功能。


回答 3:

是的,std :: cout更好。这是一个std :: ostream,也是std :: stringstream,它与称为sprintf的printf变体相似。

printf有几个问题。

  1. 它使用格式字符串不仅指定如何打印其余参数,还指定那些类型是什么(不涉及类型系统),因此编译器不知道您所要事物的类型。印刷。为了解决此问题,较新的C和C ++编译器尝试在编译时解释此字符串,这是对该函数的特殊处理。没有函数应该被特别对待。它使用了varargs,它会删除类型,因此问题1十分必要,而本来就不是。

与std :: cout一样,std :: ostream也为要打印的每种类型定义了<<操作符,其中大多数可以调用其原始类型的<<操作符来完成此任务。每个<<操作符函数都知道其打印的类型,并且在编译时完全是类型安全的,因此,基于std :: ostream不会基于格式字符串将足够的参数传递给printf的运行时问题不再是问题。需要格式字符串。

速度差异完全取决于实现,但是std :: cout通过内联具有比printf更快的功能。


回答 4:

是的,std :: cout更好。这是一个std :: ostream,也是std :: stringstream,它与称为sprintf的printf变体相似。

printf有几个问题。

  1. 它使用格式字符串不仅指定如何打印其余参数,还指定那些类型是什么(不涉及类型系统),因此编译器不知道您所要事物的类型。印刷。为了解决此问题,较新的C和C ++编译器尝试在编译时解释此字符串,这是对该函数的特殊处理。没有函数应该被特别对待。它使用了varargs,它会删除类型,因此问题1十分必要,而本来就不是。

与std :: cout一样,std :: ostream也为要打印的每种类型定义了<<操作符,其中大多数可以调用其原始类型的<<操作符来完成此任务。每个<<操作符函数都知道其打印的类型,并且在编译时完全是类型安全的,因此,基于std :: ostream不会基于格式字符串将足够的参数传递给printf的运行时问题不再是问题。需要格式字符串。

速度差异完全取决于实现,但是std :: cout通过内联具有比printf更快的功能。


回答 5:

是的,std :: cout更好。这是一个std :: ostream,也是std :: stringstream,它与称为sprintf的printf变体相似。

printf有几个问题。

  1. 它使用格式字符串不仅指定如何打印其余参数,还指定那些类型是什么(不涉及类型系统),因此编译器不知道您所要事物的类型。印刷。为了解决此问题,较新的C和C ++编译器尝试在编译时解释此字符串,这是对该函数的特殊处理。没有函数应该被特别对待。它使用了varargs,它会删除类型,因此问题1十分必要,而本来就不是。

与std :: cout一样,std :: ostream也为要打印的每种类型定义了<<操作符,其中大多数可以调用其原始类型的<<操作符来完成此任务。每个<<操作符函数都知道其打印的类型,并且在编译时完全是类型安全的,因此,基于std :: ostream不会基于格式字符串将足够的参数传递给printf的运行时问题不再是问题。需要格式字符串。

速度差异完全取决于实现,但是std :: cout通过内联具有比printf更快的功能。