什么是`CString`?

时间:2013-01-23 06:11:48

标签: c++ string mfc

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

有些人使用这种格式

char a_c_string [];

其他人使用

CString another_c_string;

有区别吗?我在CStrings上找到的所有引用都像我在第一个例子中所做的那样声明它,我只是在人们提供示例的论坛等上看到了它。

4 个答案:

答案 0 :(得分:27)

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 ++ 进行编程时才可用,这实质上是有限的。

答案 1 :(得分:20)

许多GUI框架都有自己的字符串类。 例如QT有QString,wxWindows有wxString。在这种情况下,MFC具有CString。 在MFC gui代码的上下文中使用CString是很方便和有意义的,因为那时你已经严重依赖于Visual C ++并且不会设想代码可移植性。我会小心一揽子陈述,说要忽略它,因为它是非标准的 - 这完全取决于上下文。

答案 2 :(得分:8)

以防万一是造成混淆的原因:“CString”中的“C”只是MFC所有类的前缀。 MFC是Microsoft包装win32 API的C ++库。此字符串类与“C字符串”几乎没有关系,“C字符串”用于描述C语言提供的字符串处理功能。 C语言仅提供字符串处理函数,该函数对指向字符串的char数组的指针进行操作,并且它们要求最后一个字符是NUL(也称为NUL终止或零终止)。请注意,C ++本身也有一个字符串类std::string(实际上还有std :: wstring和std :: basic_string模板,但作为初学者,你可以放心地忽略它们。)

答案 3 :(得分:-1)

CString用于 Visual C ++

Visual C ++是 Microsoft C ++

的实现