【问题标题】:cout and printf [duplicate]cout 和 printf [重复]
【发布时间】:2011-06-26 02:16:40
【问题描述】:

可能重复:
printf vs cout in C++

cout 和 printf 有什么区别?

【问题讨论】:

标签: c++ printf cout


【解决方案1】:

cout 自动进行强制转换并找出您尝试打印的变量的类型。所以你可以这样做:

int myint = 5;
cout << myint;

并且 cout 将检测到 myint 是一个 int 并打印它。使用 printf,您必须指定要打印的变量的类型:

int myint = 5;
printf("%d", myint);

另外,cout 比 printf 慢(因为它进行类型检测...),尽管在大多数实际应用中,您不会注意到性能差异。

【讨论】:

  • cout 的“类型检测”发生在编译时,但是解析 printf 的格式字符串以找出打印的类型发生在运行时,所以如果您只考虑“类型”方面,cout应该比 printf 快。
  • 类型检测在编译时就完全解决了,所以应该比printf有速度加成;速度问题来自 iostream 库中的其他基础架构。
【解决方案2】:

printf 是用于在 stdio 库(C 的 IO 库)的标准输出上打印数据的函数。主要出于遗留原因,它保留在 C++ 中,尽管有时它仍然有用。

cout 是来自 iostreams 库的 C++ 流(特别是,它被定义为 ostream &amp;); iostreams 库是执行 IO 的原生 C++ 方式。

一般来说,使用 iostreams 比旧的类似 printf 的函数更容易、更安全(感谢 &lt;&lt; 运算符重载而不是格式字符串+可变参数),而且它是执行 IO 的 C++“惯用”方式,所以你应该除非您有特殊需要,否则请使用它。

【讨论】:

    【解决方案3】:

    基本上,cout 是输出到标准输出的 C++ 方式,而printf 是 C 方式。

    C++ iostreams(cout 是其中之一)基于 C++ 类并且可扩展以处理新类。换句话说,您可以创建一个名为foo 的类,然后执行以下操作:

    foo bar;
    std::cout << bar << std::endl;
    

    另一方面,printf 无法处理新类型,您必须为该类型的每个组件编写调用 printf 的函数,其中每个组件已经是 printf 已知的类型(例如int 或 char *)。

    在 C++ 代码中使用 printf 真的没有任何借口。我总是说,如果你要使用 C++,你应该使用它,而不是沉迷于旧世界:-) 如果你想使用 printf,坚持使用 C。


    如果您正在寻找如何让您的类在 iostreams 中使用的示例,请参阅 an answer 我提供给之前关于执行此操作的代码的问题。

    【讨论】:

    • 在您的示例中如何使用 cout 打印 foo 实例?我是否必须为 foo 类重载
    • @lital maatuk:是的,你必须创建一个operator&lt;&lt; 重载;请参阅有关运算符重载的常见问题解答 (stackoverflow.com/questions/4421706/operator-overloading/…)。
    • @lital,我添加了一个指向我的另一个答案的链接,展示了它是如何完成的。
    【解决方案4】:

    取自http://forums.devshed.com/c-programming-42/difference-between-cout-and-printf-38373.html

    cout 是 C++ 中 iostream 的对象。如果您使用的是 C++,则使用 cout,它运行良好。 printf 在做一些相同的事情时,它是一个格式化函数,可以打印到标准输出。这主要用在C语言中。

    所以 printf 在某种程度上是 cout 的老大哥,因为它允许您格式化字符串。

    【讨论】:

    • C++ 流也允许通过格式化标志进行格式化。
    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多