C ++ I / O库

时间:2014-09-03 13:44:26

标签: c++ c++11 iostream stdio cstdio

我尝试使用谷歌搜索,但我在不同的地方得到了不同的答案。我想知道一个人应该使用下列之一的情况:

#include <stdio>
#include <cstdio>
#include <iostream>

我无法弄清楚区别,因为在我的情况下,如果我可以互换地使用这些程序,那么我的所有C ++程序似乎都能正常工作。话虽这么说,iostream似乎通过定义cin和cout等来支持输入和输出流。但是,我可能错了。我将非常感谢有关这些参考C ++标准的使用的答案/可靠的引用。我想知道使用其中一个是否有任何性能上的好处。

3 个答案:

答案 0 :(得分:2)

非标准标题

  • <stdio>未在我所知的任何标准中定义。

C

的标准化标题
  • <stdio.h>是包含printf()scanf()等函数的c标头。

C ++的标准化标题

  • <stdio.h>包含在c ++标准中,但已弃用。
  • <cstdio>是包含printf()scanf()等内容的c ++标题。
  • <iostream>是一个c ++标题,其中包含std::coutstd::cerrstd::cin等内容。

答案 1 :(得分:1)

stdio用于C中的标准IO。最后应该有.h。在C ++中,所有C头都封装在cxxxxxx标头中(没有.h)。因此,<stdio.h><cstudio>相同。对于简单的IO,这些功能提供了printfscanf等功能。

另一方面,

iostream是一个用于C ++的IO库,并提供了cincout等流,正如您所提到的那样。

根据您的应用程序,您可以在大多数时间互换使用它们。显然,语法会有所不同。

使用C函数可以更轻松地格式化文本。例如:

printf("item %04d has a value of %+.6e\n", index, value);
除了<iostream>之外,

比(需要<iomanip>)更容易编写:

std::cout << "item " << std::setw(4) << std::setfill('0') << index
          << "has a value of " << std::setprecision(6) << value << "\n";

但是,使用第一个时需要更加小心。例如,以下行不会产生编译错误(但正如提到的那样,编译时可能会收到警告),但会导致运行时问题:

printf("I wonder what will happen? %d\n");

我不认为它们的性能有很大差异,因为大多数流“魔法”都发生在编译时,它们应该产生类似的结果。我不是百分百肯定的,如果我错了,请纠正我。

答案 2 :(得分:0)

没有stdio(stdio.h和cstdio)。标题名称中的'c'和缺少的'.h'表示它是C头的C ++版本。

检查cstdioiostream(参考)

某些编译器(包括MSVC)在其他stl头文件中包含stl头文件,这会导致您观察到的效果。这不是便携式的!

如果您关注性能:使用C ++变体和check this