为什么我看到一些代码使用不同的方式声明 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) 你正在编写符合全球公认的ISO C++标准的C++代码,许多人为此花费了很多时间进行争论(你知道的,与一个公司办公室里的几个人相比)。这仅在您使用 Microsoft Visual C++ 进行编程时才可用,这极大地限制了其使用范围。
std::string
可以做到所有这些事情,除了转换为 const char *
/LPCSTLSKJ
,对于这种情况,你只需要调用 my_str.c_str()
。 - PotatoswatterCString
只存在一半! - Lightness Races in Orbit只是以防引起混淆: "CString"中的"C"只是来自MFC的所有类的前缀。MFC是微软的C++库,封装了win32 API。该字符串类与"C字符串"几乎没有关系,后者用于描述C语言提供的字符串处理功能。 C语言仅提供对指向表示字符串的char数组的指针进行操作的字符串处理函数,并且它们要求最后一个字符为NUL(也称为NUL终止或零终止)。请注意,C++本身也有一个字符串类std::string
(实际上还有std::wstring
,两者都是std::basic_string
模板的特化,但作为初学者,您可以安全地忽略这些)。
CString
和"C-string"非常令人困惑。更令人困惑的是,因为std::string::c_str()
返回"C-string",但它可以被分配给CString
(而std::string
则不行)。 - starriet
CString
在我使用过的任何语言中都不存在。它是从哪里来的?请从C或C++中选择一个(然后标记为此),然后告诉我们CString
所在的语言(然后标记为此)。 - Lightness Races in Orbit