簡體   English   中英

無法從 char 構造 CString

[英]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”。

我嘗試了解編譯器如何處理代碼,如下:

  1. 它將首先將 _T('A') 提升為 integer。

  2. 它將 _T('A') 的 integer 值加 5。

  3. 它將獲得一個新的 integer 並且找不到將其轉換回 TCHAR 的方法,該 TCHAR 可用作 CString 構造函數的輸入參數。

CString 不會將 int 隱式轉換為 CString。 但是你可以這樣嘗試

CString str; 
char c = 'A';
int i = 5;
str.Format(L"%c%d",c, i);  // unicode assumed

接受charwchar_tCstringT構造函數是explicit的。 請參閱文檔

C++ 中的explicit說明符意味着不允許編譯器對參數進行隱式轉換。 另請參見顯式說明符

因此,編譯器不能(不允許)將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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM