What is `CString`?

What is `CString`?

本文关键字:CString What is      更新时间:2023-10-16

为什么我看到一些代码使用CStrings声明不同。

有些使用这种格式

char a_c_string [];

当其他人使用

CString another_c_string;

有区别吗?我在CStrings上找到的所有参考资料都像我在第一个示例中所做的那样声明它,我只在人们举例的论坛等上看到它以另一种方式完成。

CString既不是C也不是C++类型。它似乎是一项Microsoft发明,本质上是std::string的替代品:

  • CString对象可能会因串联操作而增长。
  • CString对象遵循"值语义"。将CString对象视为实际字符串,而不是指向字符串的指针。
  • 您可以自由地将CString对象替换为const char*LPCTSTR函数参数。
  • 转换运算符允许以只读字符数组(C 样式字符串)的形式直接访问字符串的字符。

我建议忽略它,以便:

(a) 人们知道你在说什么;
(b) 您的代码是可移植的;
(c)你正在写C++,每个人都可以根据全球公认的ISO C++标准进行合理化,许多人为了这个明确的目的而花费很多很多时间争论(你知道,而不是几个人在一家公司办公室的房间里)。

仅当您使用 Visual C++ 进行编程时,它才可用Microsoft这在很大程度上限制了它。

许多 GUI 框架都有自己的字符串类。例如.QT有QString,wxWindows有wxString。在这种情况下,MFC具有CString(以及其他方便的容器,如CArray,CList,CMap等)。在 MFC gui 代码的上下文中使用 CString 很方便且有意义,因为这样你已经严重依赖 Visual C++并且不会设想代码可移植性。我会小心笼统的陈述说忽略它,因为它是非标准的 - 这完全取决于上下文。

以防万

一这是混淆的原因:"CString"中的"C"只是MFC中所有类都具有的前缀。MFC 是一个C++库,通过Microsoft包装 win32 API。这个字符串类与"C 字符串"关系不大,后者用于描述 C 语言提供的字符串处理工具。C 语言仅提供用于字符串处理的函数,这些函数对指向表示字符串的 char 数组的指针进行操作,并且它们要求最后一个字符是 NULL(也称为 NUL 终止或零终止)。请注意,C++本身也有一个字符串类std::string(嗯,实际上也有std::wstring,两者都是std::basic_string模板的专用化,但作为初学者,您可以安全地忽略这些)。