Visual C++提供多种管理字符串数据:
的字符串操作(crt) 与C样式Null终止的字符串一起使用
托管字符串的Win32 API函数
MFC的选件类 CStringT选件类,提供灵活,可调整大小的字符串对象
选件类 CStringT选件类,提供MFC独立字符串对象与函数和 CString相同
几乎所有程序与字符串处理数据。MFC的 CString 选件类通常是灵活字符串处理的最佳方法。从7.0版开始,CString 可用于MFC或MFC独立程序。运行库和 CString 支持包含多字节(宽)字符的字符串,在 Unicode 或 MBCS 编程。
本文介绍常规服务选件类库提供与字符串操作。本文中包含的主题包括:
Unicode和MBCS提供可移植性
CStrings和const char指针
CString引用计数
CStringT选件类 选件类提供操作的字符串支持。要替换和扩展C运行库字符串包通常提供的功能。CString 选件类提供成员函数和运算符处理简化的字符串,类似于在基本找到的接口。选件类用于构造,分配和比较 CStrings 和标准C++字符串数据类型还提供构造函数和运算符。由于 CString 从 CObject未派生,可以独立于大多数Microsoft基础选件类库使用 CString 对象(MFC)。
CString 对象在“值语义”。CString 对象表示单个值。思考 CString 作为一个实际字符串,不是指向字符串。
CString 对象表示字符数目可变序列。CString 对象可被视为字符数组。
Unicode和MBCS提供可移植性
MFC 3.0版和更高版本,MFC,包括 CString,对Unicode和多字节字符集(mbcs)启用。此支持便于您对您可以为Unicode或ANSI字符创建的编写可携式代码。若要启用此可移植性,在 CString 对象的每个字符类型 TCHAR,定义为 wchar_t,如果定义了符号 _UNICODE,当您生成应用程序时,或者 char,如果没有。wchar_t 字符都为16位。如果使用符号 _MBCS 生成定义,MBCS启用。MFC用 _MBCS 符号(对于NAFX库)或(对于UAFX库)中定义的 _UNICODE 符号生成。
![]() |
---|
CString 示例中的和字符串中的附带的文章显示为Unicode可移植性正确格式的文本字符串,使用 _T 宏,后者将字符串翻译为窗体: |
L"literal string"
![]() |
---|
哪些编译器将Unicode字符串。例如,下列代码: |
CString strName = _T("Name");
![]() |
---|
如果 _UNICODE 定义或为ANSI字符串;如果没有,会转换为Unicode字符串。有关更多信息,请参见中的文章 Unicode和多字节字符集(mbcs)支持。 |
CString 对象可存储到 INT_MAX (2,147,483,647)字符。TCHAR 数据类型用于获取或设置各个字符在 CString 对象内。不同字符数组,CString 选件类具有固定内存分配函数。这允许 CString 对象自动增大根据需要(即不需要考虑其 CString 对象以适应较长字符串)。
CStrings和const char指针
CString 对象也象一个文本C样式字符串( PCXSTR,与 const char*,如果不在Unicode下)。CSimpleStringT::operator PCXSTR 转换运算符允许 CString 对象用的指针函数调用的字符随意进行替换。CString( LPCWSTRpszSrc**)** 构造函数允许字符指针在 CString 对象进行替换。
不会尝试折叠 CString 对象。如果您创建包含 Chicago的两 CString 对象,例如,在 Chicago 的字符在两个位置存储。(这可能不是真正的MFC的未来版本,因此,您不应依赖于它。)
![]() |
---|
当您直接需要访问 CString 为用非常数指向字符的指针时,请使用 CSimpleStringT::GetBuffer 和 CSimpleStringT::ReleaseBuffer 成员函数。 |
![]() |
---|
使用 CStringT::AllocSysString 和 CStringT::SetSysString 成员函数分配和设置用于自动化的 BSTR 对象(以前称为OLE自动化)。 |
![]() |
---|
如果可能,请分配到框架中 CString 对象而不是在堆。这节省内存和简化参数传递。 |
CString 选件类不实现为Microsoft基础类库选件集合选件类,不过,CString 对象可能必须存储为元素集合中。
CString引用计数
基于MFC 4.0版,那么,当 CStringT选件类 复制对象时,MFC会递增引用计数而不是复制数据。这使得传递参数和返回值 CString 对象由更有效的值。这些操作导致复制构造函数有时不止一次调用。递增引用计数减少这些常见操作的开销并进行使用 CString 一个更构成的选项。
当销毁每个副本,原始对象的引用计数递减。销毁的原始 CString 对象,直到其引用计数减少为零。
可以使用 CString 成员函数 CSimpleStringT::LockBuffer,并禁用或启用的 CSimpleStringT::UnlockBuffer 引用计数。