printf()和cout在c++中的区别是什么?


当前回答

对我来说,真正的区别是让我选择'cout'而不是'printf':

1) <<操作符可以为我的类重载。

2) cout的输出流可以很容易地更改为一个文件: (:复制粘贴:)

#include <iostream>
#include <fstream>
using namespace std;

int main ()
{
    cout << "This is sent to prompt" << endl;
    ofstream file;
    file.open ("test.txt");
    streambuf* sbuf = cout.rdbuf();
    cout.rdbuf(file.rdbuf());
    cout << "This is sent to file" << endl;
    cout.rdbuf(sbuf);
    cout << "This is also sent to prompt" << endl;
    return 0;
}

3)我发现cout更具可读性,特别是当我们有很多参数时。

cout的一个问题是格式化选项。在printf中格式化数据(精度,合理性等)更容易。

其他回答

一个是输出到标准输出的函数。另一个是一个对象,它提供了几个成员函数和输出到stdout的操作符<<的重载。我可以列举更多的不同之处,但我不确定你想要的是什么。

这里没有提到的两点我认为很重要:

1)如果你还没有使用STL, cout会携带很多包袱。它向目标文件中添加的代码是printf的两倍多。对于字符串也是如此,这也是我倾向于使用自己的字符串库的主要原因。

2) cout使用重载的<<操作符,我觉得这很不幸。如果还将<<运算符用于其预期目的(左移),则会增加混淆。我个人不喜欢为了与其预期用途无关的目的而重载操作符。

底线:如果我已经在使用STL,我将使用cout(和字符串)。否则,我倾向于避免它。

我引用一下:

在高层术语中,主要的区别是类型安全(cstdio 没有它),性能(大多数iostreams实现都有 比cstdio慢)和可扩展性(iostreams允许 自定义输出目标和用户定义类型的无缝输出)。

我不是程序员,但我曾是人为因素工程师。我觉得编程语言应该是容易学习、理解和使用的,这就要求它有一个简单而一致的语言结构。虽然所有的语言都是象征性的,因此,在其核心是任意的,但有惯例,遵循这些惯例使语言更容易学习和使用。

在c++和其他语言中,有大量的函数以函数(参数)的形式编写,这种语法最初是在前计算机时代用于数学中的函数关系。printf()遵循这种语法,如果c++的作者想要创建任何逻辑上不同的方法来读写文件,他们可以使用类似的语法简单地创建一个不同的函数。

在Python中,我们当然可以使用同样标准的对象进行打印。方法语法,即variablename。因为变量是对象,但在c++中它们不是。

我不喜欢cout语法,因为<<操作符不遵循任何规则。它是一个方法或函数,也就是说,它接受一个参数并对它做一些事情。然而,它被写成了一个数学比较运算符。从人为因素的角度来看,这是一个糟糕的方法。

更多的差异: "printf"返回一个整数值(等于打印的字符数),"cout"不返回任何东西

And.

Cout << "y = " << 7;不是原子的。

Printf ("%s = %d", "y", 7);是原子的。

Cout执行类型检查,printf不执行。

iostream中没有% d的等价物