#include #include #include有什么区别啊?

lieyu063 2004-10-30 12:49:24
我在下面的三种写法中:
#include<cstring> //不可以定义string s;可以用到strcpy等函数
using namespace std;

#include<string> //可以定义string s;可以用到strcpy等函数
using namesapce std;

#include<string.h> //不可以定义string s;可以用到strcpy等函数

这三种到底有什么区别啊?
...全文
727 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lieyu063 2004-10-30
  • 打赏
  • 举报
回复
我在VC6.0中做的。
somedummy 2004-10-30
  • 打赏
  • 举报
回复
楼上连C标准库的string.h和C++标准库的string都分不清……
firefox6868 2004-10-30
  • 打赏
  • 举报
回复
我所知到的一点
关于#include <string.h>和#include<string>
using namesapce std;
的区别一个是前者为旧版本c++编一器使用,后者为新版本采用
只不过在新版本中兼容了旧的写法,不过在旧版本中
是不能运行新的,应该是这样
sevencat 2004-10-30
  • 打赏
  • 举报
回复
我不知道你问这个有什么意义,难道你不会臫自己看一下头文件吗?
somedummy 2004-10-30
  • 打赏
  • 举报
回复
定义和声明都在std里面,只不过在不同的头文件里面有不同的部分而已
firefox6868 2004-10-30
  • 打赏
  • 举报
回复
是吗?!

~~~~~~~~~~~~~~~~~~~~~~~~
...如过使用的是几年前创建的编译器,那么在编译这些程序时就会报告许多错误,因为这些编译器不能识别几项c++新功能...
由于新式头文件不是文件名,so他们没有.h文件扩展名.他门只是包含尖扩号内的头文件名.如:
<iostream>
要将这些新文件转换成旧试头文件,只添加.h扩展名即可...
~~~~~~~~~~~~~~~~~~~

from (美)
Herbert Schildt
2004年5月第一版


lieyu063 2004-10-30
  • 打赏
  • 举报
回复
是不是说std里放着的只是所以成员声明,并没有所有成员的定义?
somedummy 2004-10-30
  • 打赏
  • 举报
回复
cout的定义在iostream里面,当然需要包含这个头文件了,否则连接器找不到cout这个符号的意义,这样就没有办法链接成可执行文件了

另外,std里面也不是把所有的东西全都放进去了,没个头文件里面都有std的部分定义(每包含一个C++风格的头文件就会打开一次std,然后加入新的名字空间成员定义)
lieyu063 2004-10-30
  • 打赏
  • 举报
回复
我的意思是说为什么少了#include<string>程序可以运行,少了#include<iostream>就不能运行呢?
somedummy 2004-10-30
  • 打赏
  • 举报
回复
cout是一个类实例,被封装到了std里面,有什么问题吗?
lieyu063 2004-10-30
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
void main()
{
char *pc ="student";
char p[20];
strcpy(p,pc); //这样子也能执行,真搞不懂。std里到底有多少东西啊? //把#include<iostream>就不可了。难道std里有strcpy没有cout?
cout<<p<<endl;
}
somedummy 2004-10-30
  • 打赏
  • 举报
回复
我说了,cstring其实是把string.h放到std里面去而已,对于string.h,你不可以使用string模板,自然cstring也不可以了

两个都是符合C++标准,当在C++源文件中包含C标准库的时候,就可以用库名前面加c,后面的.h去掉的方式,你看看CRT的源代码就知道了
lieyu063 2004-10-30
  • 打赏
  • 举报
回复
我要纠正一点,可能VC6的string不是基于模板的(我要纠正一点,但是我明确的知道VC6里面的iostream库肯定不是基于模板的)
----------------------------
那么在标准C++中string就是基于模板的吗?这点你确定吗?
lieyu063 2004-10-30
  • 打赏
  • 举报
回复
谢谢楼上的,但我还是搞不大明白
#include<cstring> //不可以定义string s;可以用到strcpy等函数
using namespace std;

#include<string> //可以定义string s;可以用到strcpy等函数
using namesapce std;
上面这两个有什么区别?为什么上面的那个不能定义string s?这两个哪个更符合标准C++呢?
somedummy 2004-10-30
  • 打赏
  • 举报
回复
我要纠正一点,可能VC6的string不是基于模板的(这个不是很确定,但是我明确的知道VC6里面的iostream库肯定不是基于模板的)
somedummy 2004-10-30
  • 打赏
  • 举报
回复
cstring代表的是string.h,但是被封装到了std里面,譬如调用strlen函数,需要写成std::strlen(yourstr)才行,这个使用方法比较符合C++的标准要求

string就是C++标准库里面的string模板(确切地说应该是一个特化的模板),但是他同样包含了C风格字符串操作函数的定义(应该是通过包含string.h实现的)

string.h就不需要使用名字空间了,这个是C风格字符串操作的一个函数库,strlen,strcpy,strcat,strcmp……都在这里面了,不过既然是C风格的库,当然不需要namespace支持了。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧