为什么我看到一些代码使用CStrings
不同的声明。
有些使用这种格式
char a_c_string [];
而其他人使用
CString another_c_string;
有区别吗?我在第一个示例中找到的所有参考都CStrings
声明它,我只在论坛等人们给出示例的地方看到它以其他方式完成。
CString
既不是 C 也不是 C++ 类型。它似乎是微软的一项发明,本质上可以替代std::string
:
CString
对象可以由于连接操作而增长。CString
对象遵循“价值语义”。将CString
对象视为实际字符串,而不是指向字符串的指针。- 您可以自由地替换
CString
对象const char*
和LPCTSTR
函数参数。- 转换运算符可将字符串的字符作为只读字符数组(C 样式字符串)直接访问。
我建议忽略它,以便:
(a) 人们知道你在说什么;
(b) 您的代码是可移植的;
(c) 你正在编写每个人都可以根据全球公认的 ISO C++ 标准合理化的 C++,许多人为了这个明确的目的花了很多很多时间争论(你知道,而不是少数人在一间公司办公室的房间)。
它仅在您使用Microsoft Visual C++进行编程时可用,这在很大程度上是有限制的。
以防万一这是造成混淆的原因:“CString”中的“C”只是 MFC 中所有类都具有的前缀。MFC 是 Microsoft 包装 win32 API 的 C++ 库。这个字符串类与“C 字符串”关系不大,后者用于描述C 语言提供的字符串处理工具。C 语言仅提供用于字符串处理的函数,这些函数对指向表示字符串的 char 数组的指针进行操作,并且它们要求最后一个字符是 NUL(也称为 NUL 终止或零终止)。请注意,C++ 本身也有一个字符串类std::string
(嗯,实际上还有 std::wstring 和 std::basic_string 模板,但作为初学者,您可以放心地忽略它们)。