`

C++中L和_T()之区别

    博客分类:
  • c++
c++ 
阅读更多
字符串前面加L表示该字符串是Unicode字符串。
_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
以下是别人的总结:
一、在字符串前加一个L作用: 
  如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。
  strlen("asd") = 3;   
  strlen(L"asd") = 6;  
 
  二、 _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式 
  如果你定义了UNICODE,那么_T宏会把字符串前面加一个L。这时 _T("ABCD") 相当于 L"ABCD" ,这是宽字符串。
  如果没有定义,那么_T宏不会在字符串前面加那个L,_T("ABCD") 就等价于 "ABCD" 
三、TEXT,_TEXT 和_T 一样的 
如下面三语句:
  TCHAR szStr1[] = TEXT("str1");   
  char szStr2[] = "str2";   
  WCHAR szStr3[] = L("str3");   
 
  那么第一句话在定义了UNICODE时会解释为第三句话,没有定义时就等于第二句话。  
  但二句话无论是否定义了UNICODE都是生成一个ANSI字符串,而第三句话总是生成UNICODE字符串。
  为了程序的可移植性,建议都用第一种表示方法。但在某些情况下,某个字符必须为ANSI或UNICODE,那就用后两种方法。
别人的总结2:
你要确定你需要的字符串是宽字符还是窄字符。_T("")是说如果你定义了UNICODE 那么就是L"",没有定义就是"";以下情况用_T()比较好,其他情况最好别用:
1,用THCAR,LPTSTR,LPCTSTR等tchar数据类型的时候
2,用_tprintf之类的_t版本运行时函数时候
3,像下面这样有w和a版本的api,调用CreateFile的时候
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif // !UNICODE
 
分享到:
评论

相关推荐

    L_Y_T的模板

    这个是L_Y_T自学了c++后的自己打的或者是收集同学的感觉比较有用的代码,在这里分享一下.里面是有不少的东西的!

    C++-ISO (2020).pdf

    C++2020标准,I S O ( t h e I n t e r n a t i o n a l O r g a n i z a t i o n fo r S t a n d a r d i z a t i o n ) i s a w o r l d w i d e fe d e r a t i o n o f n a t i o n a l s t a n d a r d s b o d...

    C++-ISO(2017)

    C++2017标准,I S O ( t h e I n t e r n a t i o n a l O r g a n i z a t i o n fo r S t a n d a r d i z a t i o n ) i s a w o r l d w i d e fe d e r a t i o n o f n a t i o n a l s t a n d a r d s b o d...

    C++ COM实现之一 创建一个DLL

    C++ COM实现之一 创建一个DLL COM是一种接口技术,它提供了一种方法用于客户程序进行调用。COM原理和技术的文章已经很多了,就不过多讲解了,这里只注重实现。下面分几步对进程内COM组件进行编码实现以达到对实现一...

    《C++String深入详解2.0版》PDF

    2.1.4 以char和wchar_t特化char_traits 56 附录3:Boost.Format中文文档 57 2.1 大纲 57 2.2 它是如何工作的 57 2.3语法 58 2.3.1 boost::format( format-string ) % arg1 % arg2 % ... % argN 58 2.3.2 printf 格式...

    新手学习C++入门资料

    在C++中还增加了bool型变量和wchar_t型变量: 布尔型变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在表达式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值1或0。要把一个整型变量转换成布尔...

    LR.rar_LR_LR分析表 C++_lr(1)_lr设计l

    设计一个给定LR分析表,输入一个句子,能由依据LR分析法...(1) 输入LR分析表和一个句子; (2) 判别该句子的合法性; 【测试数据】 依据文法: E1->E+T|T T->T*F|F F->(E)|i 输入句子:i*i+i 输入LR分析表

    基于C++的双链表实现

    // 输出顺序表L中的所有元素 int ListLength(); // 求顺序表的长度 bool GetElem(int i, T &e); // 求顺序表中某序列号的元素值 int LocateElem(T e); // 按元素查找其第一个序号位置 bool ListInsert(int i, T e);...

    stdl专项练习

    stdl转向操作练习 c++ 程序设计实习练习

    Thinking_in_C++_中文版【高清+可搜索+可编辑/复制/粘贴+无密码】

    是:创建一个函数来试着将s h a p e *指派为一个c i r c l e * (在本例中),检查执行过程中的数据类型。 如果这个函数返回一个地址,则成功;如果返回n u l l,说明我们并没有一个c i r c l e *对象。 C + +的RT T I...

    C++ Builder高级开发人员技术指南

    C++ Builder高级开发人员技术指南,本书阐述中、高级开发主题,如创建客户 /服务器数据库应用程序,编写定制组件,创建 I n t e r n e t We b服务器应用程序,还包括对工业标准规范的支持,如 T C P / I P、 O L E...

    C++Builder5开发人员指南

    C++Builder5开发人员指南是仅存的好书之一,是一本关于C++Builder方面的基础教程,适合初学者! 本书阐述中、高级开发主题,如创建客户/服务器数据库应用程序,编写定制组件,创建I n t e r n e t We b服务器应用...

    C++常用stl算法.pdf

    学习c++,stdl 常用的算法方法,比如for_each,bind,等

    《C++算法程序设计》

    • 内存分配和释放函数:n e w与d e l e t e。 • 异常处理结构:t r y, c a t c h和t h r o w。 • 类与模板类。 • 类的共享成员、保护成员和私有成员。 • 友元。 • 操作符重载。 本章中没有涉及的其他C + +特性...

    Google C++ Style Guide(Google C++编程规范)高清PDF

    link ▶Don't use an #include when a forward declaration would suffice. When you include a header file you introduce a dependency that will cause your code to be recompiled whenever the header file ...

    C++课程设计之魔方

    T,T',T":分别为顶面顺时针转90度、逆时针转90度和180度翻转;G,H,I D,D',D":分别为底面顺时针转90度、逆时针转90度和180度翻转;J,K,L F,F',F":分别为前面顺时针转90度、逆时针转90度和180度翻转;M,N,O B...

    C++Builder_5开发人员指南

    所以只能分成3份传 本书阐述中、高级开发主题,如创建客户/服务器数据库应用程序,编写定制组件,创建I n t e r n e tWe b服务器应用程序,还包括对工业标准规范的支持,如T C P / I P、O L E以及A c t i v e X。...

    C++MFC教程

    CRect( int l, int t, int r, int b ); 指明四个坐标 CRect( const RECT& srcRect ); 由RECT结构构造 CRect( LPCRECT lpSrcRect ); 由RECT结构构造 CRect( POINT point, SIZE size ); 有左上角坐标和尺寸构造 CRect...

    数据结构与算法C++版

    • 内存分配和释放函数: n e w与d e l e t e。 • 异常处理结构: t r y, c a t c h和t h r o w。 • 类与模板类。 • 类的共享成员、保护成员和私有成员。 • 友元。 • 操作符重载。 本章中没有涉及的其他 C + +...

    C++Builder_5开发人员指南03

    C + + B u i l d e r提供特殊的I n t e r n e t组件,能够更易于处理与特殊的统一资源标识符( U R I)相关 事件和程序化构造H T M L文档。 这部分还提供了关于C + + B u i l d e r的套接字组件的章节,可使...

Global site tag (gtag.js) - Google Analytics