使用#include <iostream.h>的程序允许使用strlen()之类的字符串函数。为什么?</iostream.h>

时间:2012-11-18 04:02:05

标签: c++

#include<iostream.h>
int main()
{
   char name[] = "Mary Mon";
   cout<<strlen(name);
   return 0;
}

此程序在没有#include<string.h>的情况下正常编译。为什么呢?

1 个答案:

答案 0 :(得分:3)

首先,正如评论中指出的那样,没有名为<iostream.h>的标准头文件。 iostream.h是在1998年C ++语言标准化之前使用的头文件。当标准发布时,名称更改为<iostream>(没有.h)。

其次,标准允许标题包含其他标题(C ++03§17.4.4.1/ 1)。因此,<iostream.h>标头可能包含<string.h>,可能是因为某些模板代码依赖于某些字符串函数。因此,您的代码可以完整地编译。

尽管如此,你不应该依赖这种行为。为了使您的代码最具可移植性,您应该#include所需的每个头文件,无论它们是否由其他头文件递归#include