为什么我看到一些使用CStrings的代码声明不同。有些使用这种格式
CStrings
char a_c_string [];
而其他人使用
CString another_c_string;
有什么区别吗?我在CStrings上找到的所有引用都像我在第一个例子中一样声明了它,我只在论坛和类似的地方看到过它是以相反的方式做的,在人们给出例子的地方。
kqhtkvqz1#
CString既不是C也不是C++类型。It appears to be a Microsoft invention本质上是std::string的替代品:
CString
std::string
const char*
LPCTSTR
我建议忽略它,以便:(a)人们知道你在说什么;(b)代码是可移植的;(c)你正在编写的C++,每个人都可以根据世界公认的ISO C标准合理化,许多人为了这个明确的目的花费了很多很多时间争论(你知道,而不是几个人在一个房间里 * 一家公司的办公室 *)。只有当您使用 *Microsoft Visual C* 编程时,它才可用,这是非常有限的。
mbzjlibv2#
许多GUI框架都有自己的字符串类。例如,QT有QString,wxWindows有wxString。在这种情况下,MFC有CString(沿着其他方便的容器,如CArray,CList,CMap等)。在MFC gui代码的上下文中使用CString是方便和有意义的,因为这样你就已经严重依赖于Visual C++,代码的可移植性将无法想象。我会很小心地说忽略它,因为它是非标准的-这一切都取决于上下文。
uajslkp63#
以防万一这是混淆的原因:“CString”中的“C”只是MFC中的所有类都具有的前缀。MFC是微软 Package 了win32 API的C库。这个字符串类与“C字符串”几乎没有关系,后者用于描述C语言提供的字符串处理功能。C语言只提供字符串处理函数,这些函数对表示字符串的char数组的指针进行操作,并且它们要求最后一个字符是NUL(也称为以NUL结尾或以零结尾)。请注意,C本身也有一个字符串类std::string(实际上也有std::wstring,两者都是std::basic_string模板的特殊化,但作为初学者,您可以放心地忽略它们)。
std::wstring
std::basic_string
3条答案
按热度按时间kqhtkvqz1#
CString
既不是C也不是C++类型。It appears to be a Microsoft invention本质上是std::string
的替代品:CString
对象可以作为连接操作的结果而增长。CString
对象遵循“值语义”。将CString
对象视为实际的字符串,而不是指向字符串的指针。CString
对象替换const char*
和LPCTSTR
函数参数。我建议忽略它,以便:
(a)人们知道你在说什么;
(b)代码是可移植的;
(c)你正在编写的C++,每个人都可以根据世界公认的ISO C标准合理化,许多人为了这个明确的目的花费了很多很多时间争论(你知道,而不是几个人在一个房间里 * 一家公司的办公室 *)。
只有当您使用 *Microsoft Visual C* 编程时,它才可用,这是非常有限的。
mbzjlibv2#
许多GUI框架都有自己的字符串类。例如,QT有QString,wxWindows有wxString。在这种情况下,MFC有CString(沿着其他方便的容器,如CArray,CList,CMap等)。在MFC gui代码的上下文中使用CString是方便和有意义的,因为这样你就已经严重依赖于Visual C++,代码的可移植性将无法想象。我会很小心地说忽略它,因为它是非标准的-这一切都取决于上下文。
uajslkp63#
以防万一这是混淆的原因:“CString”中的“C”只是MFC中的所有类都具有的前缀。MFC是微软 Package 了win32 API的C库。这个字符串类与“C字符串”几乎没有关系,后者用于描述C语言提供的字符串处理功能。C语言只提供字符串处理函数,这些函数对表示字符串的char数组的指针进行操作,并且它们要求最后一个字符是NUL(也称为以NUL结尾或以零结尾)。请注意,C本身也有一个字符串类
std::string
(实际上也有std::wstring
,两者都是std::basic_string
模板的特殊化,但作为初学者,您可以放心地忽略它们)。