CString 和 string 实现技术上的区别?

butterflygogogo 2010-07-08 09:54:17
求指教!
...全文
243 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuqibingbuso 2010-07-10
  • 打赏
  • 举报
回复
学习了
hastings 2010-07-09
  • 打赏
  • 举报
回复
VC6的CString很神奇,成员变量只有一个protected成员LPTSTR m_pchData;..................
看样子好像每个CString对象的前面会储存一个 CStringData对象,用于保存CString的引用计数等;
奇怪的是CStringData不是CString的成员。 CStringData的定义如下:
struct CStringData
{
long nRefs; // reference count
int nDataLength; // length of data (including terminator)
int nAllocLength; // length of allocation
// TCHAR data[nAllocLength]

TCHAR* data() // TCHAR* to managed data
{ return (TCHAR*)(this+1); }
};
sb3day 2010-07-09
  • 打赏
  • 举报
回复
学习了
cbib_cat 2010-07-09
  • 打赏
  • 举报
回复
不了解 学习了
Eleven 2010-07-09
  • 打赏
  • 举报
回复
觉得哪个方便就用哪个。。。
only_delusion 2010-07-09
  • 打赏
  • 举报
回复
据说 string 是类型 CString是类

那么CString 就是需要封装之类的东西.....
liuwei2500 2010-07-09
  • 打赏
  • 举报
回复
利用MFC进行编程时,我们从对话框中利用GetWindowText得到的字符串是CString类型,CString是属于MFC的类。而一些标准C/C++库函数是不能直接对CString类型进行操作的,所以我们经常遇到将CString类型转化char*等等其他数据类型的情况。首先要明确,标准C中是不存在string类型的,string是标准C++扩充字符串操作的一个类。但是我们知道标准C中有string.h这个头文件,这里要区分清楚,此string非彼string。string.h这个头文件中定义了一些我们经常用到的操作字符串的函数,如:strcpy、strcat、strcmp等等,但是这些函数的操作对象都是char*指向的字符串。 而C++的string类操作对象是string类型字符串,该类重装了一些运算符,添加了一些字符串操作成员函数,使得操作字符串更加方便。有的时候我们要将string串和char*串配合使用,
康斯坦汀 2010-07-09
  • 打赏
  • 举报
回复
非技术区别: CString诞生的早啊,MFC1就有了吧,1992年? 貌似后来用模板改写的,
MFC中的很多东西都是为了兼容以前,那时候还没有STL,C++标准等等。
如果没有历史包袱,CString早就被std:string替代了。
na2650945 2010-07-09
  • 打赏
  • 举报
回复
引用计数。
智能指针。
防止野指针。
老邓 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhangjian33446 的回复:]

计数器是什么意思 小弟是菜鸟 麻烦说的详细点
[/Quote]
我第二次打错了,是引用计数。
butterflygogogo 2010-07-08
  • 打赏
  • 举报
回复
计数器是什么意思 小弟是菜鸟 麻烦说的详细点
老邓 2010-07-08
  • 打赏
  • 举报
回复
其他,再无技术上的区别可言。
老邓 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhangjian33446 的回复:]

遇到了一个笔试题 就是这个 问的是实现技术上的...
[/Quote]
他想问你的应该是:std::string使用了引用计数(VC老版本,GCC所有版本),而CString没有使用计数器(ATL中的,非WTL中的)。
butterflygogogo 2010-07-08
  • 打赏
  • 举报
回复
遇到了一个笔试题 就是这个 问的是实现技术上的...
老邓 2010-07-08
  • 打赏
  • 举报
回复
另外,CString提供了更多的接口,比如非常好用的Format功能。
还有编码转换功能,都是很人性化的。
butterflygogogo 2010-07-08
  • 打赏
  • 举报
回复
麻烦大虾给说下 没时间看源代码了....
简单的说下就行
老邓 2010-07-08
  • 打赏
  • 举报
回复
从性能上来讲,CString是要好些的。
从与系统API的接口易用性,CString也要好些的。
从编译后程序的空间占用来讲,CString仍然要好些的。

共同点都是模板类;
区别是:一个是标准,一个是Windows的VC专用。
老邓 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhangjian33446 的回复:]

实现技术上有什么差别 在线等
[/Quote]
看源码好了,std::string和CString都有源码的。
butterflygogogo 2010-07-08
  • 打赏
  • 举报
回复
实现技术上有什么差别 在线等
加载更多回复(1)

64,637

社区成员

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

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