如题!

解决方案 »

  1.   

    Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。 
    L则是Unicode的类型
      

  2.   

    L表示这个字串要用UNICODE编码来编译,_T如果定义了_UNICODE宏就按UNICODE来编译,否则就按ANSI来编译
      

  3.   


    L 是根本,_T 只是形式。
    看如下定义:
    如果定义了_UNICODE标识符,那么一个称作__T的宏就定义如下:#define __T(x) L##x 
    如果没有定义_UNICODE标识符,则__T宏只简单地定义如下:#define __T(x) x///////举个例子,即可明白:CString str = _T("12345");在非 UNICODE 工程下等于:CString str = "12345";在 UNICODE 工程下等于:CString str = L"12345";这个在编译时就决定了,其实就是个宏替换。
    明白否?
    还不明白,就看『Windows程序设计』第二章【UNICODE简介】,下载地址:
    http://blog.csdn.net/zaodt/archive/2007/11/25/1901332.aspx
      

  4.   

    字符串前面加L表示该字符串是Unicode字符串。
    _T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。
      

  5.   

    L是表示Unicode
    _T可以是UNICODE,也可以是ansi,看编译设置
      

  6.   

    简而言之,这是一种“自适应”技术,有的书称呼_T为垫片宏(COM本质论甚至特别为此设计了一个垫片类,功能完全一样)这里要更正zhaodt,设计_T不是仅仅为了形式,而是为了使软件编程更容易。绝大多数情况下,你应该使用_T而不是L原因是:这种编程风格允许是在MCBS和Unicode两种设置种切换。你程序是在MCBS方式下测试和编写的,后来想切换成Unicode方式,只要增加一个_UNICODE宏定义即可,代码几乎不要修改。而如果你写L"abc",则字符串被强制设置宽字符,这种字符串在使用时你必须确保所有的相关API都必须是宽字符的。例如:VS2005缺省是unicode模式下的,因此你写L"abc"不会有问题,但是对于下面代码
    CString str = L"abc";假如你有一天突然想换成MCBS,则上面这么简单的代码都会报错,而下面代码则不需要担心这个
    CString str = _T("abc")
      

  7.   

    _T只是一个宏,它会识别上下文来指定编码方式,而L是一个编码标识是固定的,像3.0f就是表示浮点数
      

  8.   

    好像在windef.h文件中有关于这两个宏的定义,具体可以全文搜索一下,不是很难找的。
      

  9.   

    上面说的已经差不多了,另外
    L"xxx";是编译器支持的,而
    _T("xxx");是宏支持的,VC需tchar.h头文件,gcc中未定义。
      

  10.   


    这个论述误导了后面很多结论哦L只是宽字符字符串的前缀。
    [code] const wchar_t *xx = L"xxxxxx";[/code]
    上面这个语句无论是UNICODE工程还是非UNICODE工程都没有问题的说。
      

  11.   

    const wchar_t *xx = L"xxxxxx";这个语句。