C++ - _T含義 C++語言中“_T”是什么意思?


_T("Hello")是一個宏,他的作用是讓你的程序支持Unicode編碼,因為Windows使用兩種字符集ANSI和UNICODE,前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。而后者是雙字節方式,方便處理雙字節字符。

Windows NT的所有與字符有關的函數都提供兩種方式的版本,而Windows 9x只支持ANSI方式。
如果你編譯一個程序為ANSI方式,_T實際不起任何作用。而如果編譯一個程序為UNICODE方式,則編譯器會把"Hello"字符串以UNICODE方式保存。

_T和_L的區別在於,_L不管你是以什么方式編譯,一律以UNICODE方式保存。

---------------------------------------------------------------------------------------------------------------

 

1\C++語言中“_T”是什么意思?

Visual C++里邊定義字符串的時候,用_T來保證兼容性,VC支持ascii和unicode兩種字符類型,用_T可以保證從ascii編碼類型轉換到unicode編碼類型的時候,程序不需要修改。

如果將來你不打算升級到unicode,那么也不需要_T,

---------------------------------------------------------

_t("hello world")
在ansi的環境下,它是ansi的,如果在unicode下,那么它將自動解釋為雙字節字符串,既unicode編碼。
這樣做的好處,不管是ansi環境,還是unicode環境,都適用。

2\請問在vc++中的字符串_T("ABC")和一個普通的字符串“ABC”有什么區別。

_T("ABC")
表示如果定義了unicode
它表示 L"ABC",每個字符為16位,寬字符字符串
---------------------------------------------------------
if not UNICODE
它就是ascii的"ABC",每個字符為8位
"ABC"就是指ascii字符串"ABC"

----------------------------------------------------------

相當於
#ifdef _UNICODE
#define _T("ABC") L"ABC"
#else
#define _T("ABC") "ABC"
#endif

----------------------------------------------------------

_T("ABC")中的一個字符和漢字一樣,占兩個字節,而在"ABC"中,英文字符占一個字節,漢字占兩個字節

 

 

---------------------------------------------------------------------------------------------------------------

_T在tchar.h頭文件中定義了:

#define __T(x)      L ## x

#define _T(x)       __T(x)

 

-- ##在宏里面相當於連接符,把前后兩個字符串連在一起作為一個字符串。

 

以下來自網絡:
#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x

x##y表示什么?表示x連接y,舉例說:
int n = Conn(123,456); 結果就是n=123456;
char* str = Conn("asdf", "adf")結果就是 str = "asdfadf";
怎么樣,很神奇吧

再來看#@x,其實就是給x加上單引號,結果返回是一個const char。舉例說:
char a = ToChar(1);結果就是a='1';
做個越界試驗char a = ToChar(123);結果是a='3';
但是如果你的參數超過四個字符,編譯器就給給你報錯了!error C2015: too many characters in constant   :P

最后看看#x,估計你也明白了,他是給x加雙引號
char* str = ToString(123132);就成了str="123132";

先說寬字符常量,它是用來支持某些語言的字符集合,如漢語、日語,這些語言中的某些字符不能用單個字符表示。於是想對應的就有了寬字符串咯!

L -> Long 對於寬字符傅值是L字符串 2個字節存儲
因為ASCII是完全的美國標准無法有效表示其他國家語言符號
后來引入了活動頁影射效果不甚理想
最后決定2字節寬字符編碼 65535個字符足於應付世界上各個國家的語言
中日韓字符集好像被編在 0X4FFF -- 0X9FFF 之間

不推薦直接使用L"",除非你指定了特定的API等,比如xxxxxW
一般使用_T(""),在VC


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM