[英]Cannot construct CString from a char
在VS2008中,我嘗試從一個char構造一個CString,如下:
CString str = CString(_T('A') + 5);
但是會得到以下編譯錯誤:
錯誤 C2440:“”:無法從“int”轉換為“CString”
我相信 TCHAR 和 int 在 C++ 中是可交換的,那么為什么它拒絕接受 TCHAR 類型參數來構造 CString?
該行的目的是構造一個只有一個字符_T('F') 的CString。 不要得到“A5”。
我嘗試了解編譯器如何處理代碼,如下:
它將首先將 _T('A') 提升為 integer。
它將 _T('A') 的 integer 值加 5。
它將獲得一個新的 integer 並且找不到將其轉換回 TCHAR 的方法,該 TCHAR 可用作 CString 構造函數的輸入參數。
CString 不會將 int 隱式轉換為 CString。 但是你可以這樣嘗試
CString str;
char c = 'A';
int i = 5;
str.Format(L"%c%d",c, i); // unicode assumed
接受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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.