为什么我会看到使用CStrings
声明不同的代码。
有些人使用这种格式
char a_c_string [];
其他人使用
CString another_c_string;
有区别吗?我在CStrings
上找到的所有引用都像我在第一个例子中所做的那样声明它,我只是在人们提供示例的论坛等上看到了它。
答案 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 ++
的实现