CString VS std::string

fancystyle 2010-03-09 10:07:33
很老套的问题,在网上搜了一些,还是想听听大家的意见.我是新手.

先说我不想用CString的理由:
1.我在写WTL的工程,非MFC.我在WTL的类库里面有用字符串相关的函数的情况,都是LPCTSTR 之类的.没有直接用CString.这种情况下,我用std:string与CString选择的话没有哪个会更好的理由.

2.经过比较,我已经放弃使用TCHAR类型的函数,工程使用Unicode.我感觉这样更清晰,T类型的函数让我更迷惑,要不使用char* 要不就用wchar_t*.更心安些.CString也许在处理TCHAR一类的有些方便之处.在这种情况下也没用了

3.我在使用一些网上的开源库的时候,别人的代码都是std:string.如果我使用CString.给我带来很多转换不方便.让我在写类函数接口时返回到底是是哪个.很纠结

4.看到有人说CString比string快,.NET我都用了,我不在意那点性能.

5.CString支持的方法的确比较string多.比如Format,很方便.我相信std:string肯定也有方法.我搜索即可.

我还有必要使用CString么?我想放弃之了.

学VC++给我最大的痛苦不是C++语言的复杂性.却是什么东西都让我选择,貌似选哪个都行,选哪个都不行.
...全文
给本帖投票
1178 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
白云飘飘飘 2010-03-16
  • 打赏
  • 举报
回复
之所以会面临这种选择,只能说明C语言太伟大了,有哪种语言能像它这样适用性这么广呢?
只所以string没有提供format,是因为C++标准库的stream类专门用来处理字符串的格式化和解析的。你就用sstream好了。
Proteas 2010-03-16
  • 打赏
  • 举报
回复
既然已经用了 WTL 就用 CString 吧。
WTL 可以跨平台吗?!
没关注过。
arong1234 2010-03-16
  • 打赏
  • 举报
回复
觉得这不是那种String更好的问题,而是楼主是不是能适应、使用所有String最大利用它长处的问题。例如,楼主的例子中的_T就是一个非常有用的垫片宏,因为它让你confuse你就不用,不是说这个宏不好,而是楼主自己理解能力不足,因此驾驭不了它。

老实说,我觉得每种string都有它应用的场景,我基本上随便哪种string都用,没觉得哪种特别好那种特别不好

[Quote=引用楼主 fancystyle 的回复:]
很老套的问题,在网上搜了一些,还是想听听大家的意见.我是新手.

先说我不想用CString的理由:
1.我在写WTL的工程,非MFC.我在WTL的类库里面有用字符串相关的函数的情况,都是LPCTSTR 之类的.没有直接用CString.这种情况下,我用std:string与CString选择的话没有哪个会更好的理由.

2.经过比较,我已经放弃使用TCHAR类型的函数,工程使用Unic……
[/Quote]
zero_226 2010-03-16
  • 打赏
  • 举报
回复
哪个用的熟就用哪个,我是这么想滴
chenyu2202863 2010-03-12
  • 打赏
  • 举报
回复
都行,看你如何运用~
jackyjkchen 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fancystyle 的回复:]
多谢楼上多位大哥的指导.
引用STL与Windows系列的库混用有风险的,需要考虑到的细节太多。引用 5 楼 forestdb 的回复:要么用stl,要么用Windows的库, 不要混用。

我想知道详细点,比如什么情况下.这类风险会发生?
[/Quote]
主要是非ascii字符的处理方式、线程安全等
rome55 2010-03-12
  • 打赏
  • 举报
回复
如果你有开发3年以上的经验就用Cs
如果没有的话 就用St
xboy 2010-03-12
  • 打赏
  • 举报
回复
编程到深处可以看成是一门艺术,但是更多的情况下养成遵从标准的习惯,可以让我们少不必要的错。

boych 2010-03-12
  • 打赏
  • 举报
回复
有想法总是好的~
fancystyle 2010-03-09
  • 打赏
  • 举报
回复
多谢楼上多位大哥的指导.
引用
STL与Windows系列的库混用有风险的,需要考虑到的细节太多。
引用 5 楼 forestdb 的回复:
要么用stl,要么用Windows的库,
不要混用。


我想知道详细点,比如什么情况下.这类风险会发生?
「已注销」 2010-03-09
  • 打赏
  • 举报
回复
如果使用WTL开发,那就肯定不会考虑跨平台(也跨不了,连编译器都跨不了)。
所以,我认为CString是最好的选择。

我现在使用wxWidgets,我就会用wxString。
而当我用Qt开发时,我会用QString。

已经尽量在避免使用std::string了,因为要跨编译器。
GCC的std::string的引用计数,让我总提心吊胆。
「已注销」 2010-03-09
  • 打赏
  • 举报
回复
即使你使用std::string,在可移植性上也要小心。
因为VC7以上的std::string不使用引用计数,而GCC的std::string是使用引用计数的。
引用计数的实现有线程安全问题。
fox000002 2010-03-09
  • 打赏
  • 举报
回复
用 WTL 的话,完全可以使用 CString

ATL 中也是有 CString 的
野男孩 2010-03-09
  • 打赏
  • 举报
回复
无妨,CString和std::string两个实现都挺好的。

至于怎么选,看用途吧。要是不在意可移植性,就是在微软平台上用,CString没啥不好的。考虑到移植性的话,毫无疑问要选std::string了。
ForestDB 2010-03-09
  • 打赏
  • 举报
回复
要么用stl,要么用Windows的库,
不要混用。
jackyjkchen 2010-03-09
  • 打赏
  • 举报
回复
楼主如果真的经常使用API得话就会了解T版的作用,U+A双版本可是微软价值观的精髓所在,如果显式指定,代码不完美不说(无法调整字符集),还可能遇到许多问题。

STL与Windows系列的库混用有风险的,需要考虑到的细节太多。
  • 打赏
  • 举报
回复
喜欢用那就就用那个了,混合用也无妨.
老吴笔记 2010-03-09
  • 打赏
  • 举报
回复
如果你不打算在别的平台上用,你还是选择最方便最好的吧
如果你考虑到移植性,最好就是用标准的东西
完毕.
昵称很不好取 2010-03-09
  • 打赏
  • 举报
回复
能解决问题的方法才是好方法
想放弃也好,毕竟CString只是微软的东西,还是用标准的通用性好

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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

手机看
关注公众号

关注公众号

客服 返回
顶部