gpt4 book ai didi

c++ - 无法从 char 构造 CString

转载 作者:行者123 更新时间:2023-11-28 01:16:14 25 4
gpt4 key购买 nike

在 VS2008 中,我尝试从一个 char 构造一个 CString,如下所示:

CString str = CString(_T('A') + 5);

但是会得到如下编译错误:

错误 C2440:“”:无法从“int”转换为“CString”

我相信 TCHAR 和 int 在 C++ 中是可以交换的,那么为什么它拒绝接受 TCHAR 类型参数来构造 CString?

该行的目的是构造一个只有一个字符 _T('F') 的 CString。不要得到“A5”。

我试着理解编译器是如何处理代码的,如下:

  1. 它首先会将 _T('A') 提升为整数。

  2. 它将 _T('A') 的整数值加上 5。

  3. 它将得到一个新的整数,但无法找到将其转换回 TCHAR 的方法,可以用作 CString 构造函数的输入参数。

最佳答案

接受charwchar_tCstringT 构造函数是显式。查看docs .

C++ 中的explicit 说明符意味着不允许编译器对参数进行隐式转换。另见 explicit specifier .

因此编译器不能(不允许)将 int 值隐式转换为 charwchar_t

(请注意,这取决于正在设置的标志 _ATL_CSTRING_EXPLICIT_CONSTRUCTORS。如果没有设置标志,构造函数不是显式的,但是选择哪个构造函数是不明确的。)

因此您需要将参数显式转换为charwchar_t,具体取决于您的需要:

CStringA str = CStringA(static_cast<char>('A' + 5));

或:

CStringW str = CStringW(static_cast<wchar_t>(L'A' + 5));

关于c++ - 无法从 char 构造 CString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com