c++ 什么是“CString”?

l2osamch  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(213)

为什么我看到一些使用CStrings的代码声明不同。
有些使用这种格式

  1. char a_c_string [];

而其他人使用

  1. CString another_c_string;

有什么区别吗?我在CStrings上找到的所有引用都像我在第一个例子中一样声明了它,我只在论坛和类似的地方看到过它是以相反的方式做的,在人们给出例子的地方。

kqhtkvqz

kqhtkvqz1#

CString既不是C也不是C++类型。It appears to be a Microsoft invention本质上是std::string的替代品:

  • CString对象可以作为连接操作的结果而增长。
  • CString对象遵循“值语义”。将CString对象视为实际的字符串,而不是指向字符串的指针。
  • 您可以自由地用CString对象替换const char*LPCTSTR函数参数。
  • 转换运算符提供对字符串的字符的直接访问,作为字符的只读数组(C样式字符串)。

我建议忽略它,以便:
(a)人们知道你在说什么;
(b)代码是可移植的;
(c)你正在编写的C++,每个人都可以根据世界公认的ISO C标准合理化,许多人为了这个明确的目的花费了很多很多时间争论(你知道,而不是几个人在一个房间里 * 一家公司的办公室 *)。
只有当您使用 *Microsoft Visual C
* 编程时,它才可用,这是非常有限的。

mbzjlibv

mbzjlibv2#

许多GUI框架都有自己的字符串类。例如,QT有QString,wxWindows有wxString。在这种情况下,MFC有CString(沿着其他方便的容器,如CArray,CList,CMap等)。在MFC gui代码的上下文中使用CString是方便和有意义的,因为这样你就已经严重依赖于Visual C++,代码的可移植性将无法想象。我会很小心地说忽略它,因为它是非标准的-这一切都取决于上下文。

uajslkp6

uajslkp63#

以防万一这是混淆的原因:“CString”中的“C”只是MFC中的所有类都具有的前缀。MFC是微软 Package 了win32 API的C库。这个字符串类与“C字符串”几乎没有关系,后者用于描述C语言提供的字符串处理功能。C语言只提供字符串处理函数,这些函数对表示字符串的char数组的指针进行操作,并且它们要求最后一个字符是NUL(也称为以NUL结尾或以零结尾)。请注意,C本身也有一个字符串类std::string(实际上也有std::wstring,两者都是std::basic_string模板的特殊化,但作为初学者,您可以放心地忽略它们)。

相关问题