无法从字符构造CString
Cannot construct CString from a char
在VS2008中,我尝试从一个字符构造一个CString,如下所示:
CString str = CString(_T('A') + 5);
但是会得到以下编译错误:
错误C2440:":无法从"int"转换为"CString">
我相信TCHAR和int在C++中是可交换的,那么为什么它拒绝接受TCHAR类型参数来构造CString呢?
该行的目的是构造一个只有一个字符_T('F'(的CString。不要得到"A5"。
我试图理解编译器是如何处理代码的,如下所示:
它将首先将_T('A'(提升为整数。
它将把_T('A'(的整数值加5。
它将获得一个新的整数,但找不到将其转换回TCHAR的方法,TCHAR可以用作CString构造函数的输入参数。
接受char
或wchar_t
的CstringT
构造函数是explicit
。请参阅文档。
C++中的explicit
说明符表示编译器不允许对参数进行隐式转换。另请参见显式说明符。
因此,编译器不能(不允许(将int
值隐式转换为char
或wchar_t
。
(注意,这取决于正在设置的标志_ATL_CSTRING_EXPLICIT_CONSTRUCTORS
。如果没有设置标志,构造函数就不是显式的,但选择哪个构造函数就不明确了。(
因此,您需要将参数显式转换为char
或wchar_t
,具体取决于您想要的内容:
CStringA str = CStringA(static_cast<char>('A' + 5));
或:
CStringW str = CStringW(static_cast<wchar_t>(L'A' + 5));
CString不会隐式地将int转换为CString。然而,你可以尝试这样
CString str;
char c = 'A';
int i = 5;
str.Format(L"%c%d",c, i); // unicode assumed
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 无法从字符构造CString
- 使用 cstring 将字符串转换为字符数组
- 反向查找指针,以n在CSTRING中出现一个字符
- 将 CString 表单转换为常量字符*
- 标记 CString 问题与制表符空格字符
- 将 CString 转换为字符类型
- 如何正确地将无符号字符转换为CString,并再次将CString的结果反向转换为无符号字符
- 将 ATL CString 转换为字符数组
- 如何替换CString中字符的第一次出现
- 检查Cstring是否只包含中文字符
- 当我试图在c++中反转cstring时,我得到了一堆额外的字符
- c++中替换CString中的字符
- visual Escape C++中CString中的特殊字符
- cstring和指针:试图删除字符数组时堆损坏
- 在c++中使用CString变量重复一个字符的次数
- c++对cstring数组中特殊字符的测试