头文件iostream 与iostream.h区别
### 头文件iostream与iostream.h的区别 在C++编程中,`iostream`和`iostream.h`是两个重要的头文件,它们对于输入输出流的操作至关重要。本文将深入探讨这两个头文件之间的区别及其对C++程序的影响。 #### 1. C++标准库的发展 - **C++98**:在早期的C++标准(C++98)中,`iostream.h`被广泛使用。 - **C++11及以后**:随着C++语言的发展,特别是C++11标准的引入,`iostream`成为了标准的头文件,并且不再推荐使用带有`.h`后缀的头文件。 #### 2. 命名空间的变化 - **命名空间**:`iostream`位于`std`命名空间下,而`iostream.h`不包含在任何命名空间中。 - **代码示例**: - 使用`iostream`时需要显式地使用`using namespace std;`来访问标准库中的函数和对象。 - 使用`iostream.h`则不需要这样的声明,因为其中的函数和对象直接存在于全局命名空间内。 #### 3. 标准化差异 - **标准化**:`iostream`遵循了C++标准库的设计规范,更符合现代C++的编码风格和最佳实践。 - **非标准化**:`iostream.h`虽然在某些旧版本的编译器中仍然可用,但并不符合最新的C++标准,因此可能会导致跨平台问题。 #### 4. 兼容性问题 - **兼容性**:使用`iostream.h`可能会遇到兼容性问题,尤其是在更新的编译器版本中。 - **代码示例**:例如,在Visual C++.NET 2003中,使用`iostream.h`可能导致编译错误,如`'std': does not exist or is not a namespace`。 #### 5. 文件结构和组织 - **文件结构**:`iostream`通常包含了其他相关头文件的引用,如`fstream`、`iomanip`等,这使得其更加模块化。 - **组织方式**:`iostream.h`则通常是一个单一的头文件,包含了所有输入输出相关的定义。 #### 6. 功能和特性 - **新功能**:`iostream`支持更多现代C++的功能和特性,如`std::string`的支持,以及对`std::ifstream`、`std::ofstream`等类的改进。 - **旧功能**:`iostream.h`则可能缺少一些新的特性,如`std::string`的完整支持,以及对文件缓冲区操作的新API,如`filebuf::sh_read`等。 #### 7. 性能考虑 - **性能**:使用`iostream`相比`iostream.h`可能会带来更好的性能,因为它遵循了更现代的设计原则和技术,如异常安全性和资源管理。 - **代码示例**:例如,`iostream`中的`istream`和`ostream`提供了更高效的数据读写方法。 #### 8. 示例对比 下面通过几个简单的示例来展示使用`iostream`与`iostream.h`的区别: ```cpp // 使用<iostream> #include <iostream> using namespace std; int main() { cout << "<iostream> need to use namespace std!" << endl; return 0; } ``` ```cpp // 使用<iostream.h> #include <iostream.h> int main() { cout << "<iostream.h> does not require using namespace std!" << endl; return 0; } ``` #### 9. 总结 尽管`iostream`和`iostream.h`都可以用于实现基本的输入输出功能,但它们之间存在明显的差异。对于现代C++程序而言,强烈建议使用`iostream`,因为它遵循了最新的C++标准,提供了更好的兼容性、功能性和性能。同时,使用`iostream`也有助于编写更加清晰、易于维护的代码。 理解`iostream`与`iostream.h`之间的区别对于每一个C++程序员来说都是非常重要的,这不仅有助于编写出更高质量的代码,也能避免因使用过时的技术而导致的问题。
< string.h> 是旧的c/c++头文件,对应的是基于char的字符串处理函数;
< string> 是包装了std的c++头文件,对应的是新的strng类;
< cstring> 是对应旧的c头文件的std版本。
如果编译器都同时支持< iostream > 和< iostream.h > ,那使用#include < iostream > ,得到的是置于名字空间std下的iostream库的元素;如果使用#include < iostream.h > ,得到的是置于全局空间的同样的元素。在全局空间获取元素会导致名字冲突,而设计名字空间的初衷正是用来避免这种名字冲突的发生。
想象讯雷下载软件一样,先从服务器确定下载文件的大小,初始时即保存文件,全部填充0,
多个线程下载数据直接写入文件, 对自己线程负责下载的那段文件片的0进行改写,
其中就涉及到文件共享写的操作
出现的问题时:
vc7.1< fstream> 已经不支持 filebuf::sh_read等关键字,不知在vc7下若要用文件流来对文件进行非独占读和写操作该如何实现?
而:
vc6.0中的iostream.h < fstream.h>
filebuf::sh_read
filebuf::sh_write
filebuf::sh_note
filebuf::sh_openprot
无论自己是用vc6或者vc7的ide
当用到标准的输入输出和文件流时都是:
include< iostream>
include< fstream>
using namespace std
a:
include< iostream.h>
include< fstream.h>
b:
include< iostream>
include< fstream>
a是标准用法,b是老式用法。
如果用了< iostream> ,则一定要引入命名空间,即" using namespace std " .
如果用了< iostream.h> ,则不那引入命名空间,否则会引起编译错误,提示
找不到命名空间,例程如下:
//情况一:使用< iostream> 和命名空间
#include < iostream>
using namespace std
int main()
{
cout< < " < iostream> need to use namespace std!\n"
return 0
}
输出:
< iostream> need to use namespace std!
press any key to continue
//情况二:使用< iostream.h> ,不引入命名空间
#include < iostream.h>
//using namespace std
int main()
{
剩余5页未读,继续阅读
- 粉丝: 1
- 资源: 101
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助