当前位置: 首页 > news >正文

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

字符串前面加L表示该字符串是Unicode字符串。(L应该是Long的意思)
_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

 

相关文章:

  • 关于 wcout 输出中文的问题
  • 非静态成员必须与特定对象相对
  • 压缩文件修复
  • 循环冗余校验(CRC)算法入门引导
  • C++ getline函数用法详解
  • cout后面输出时加endl和不加endl的区别
  • iostream
  • ChromeNativeMessaging 原生消息通信
  • IT前端开发和后端开发
  • socket原理及实例
  • 关于iostream与using namespace std 的解析
  • ws2_32.dll和wsock32.dll
  • lib文件
  • 阻塞和非阻塞
  • 并发、并行、串行
  • [case10]使用RSQL实现端到端的动态查询
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • CSS盒模型深入
  • ES6核心特性
  • Fabric架构演变之路
  • javascript 总结(常用工具类的封装)
  • JavaScript设计模式之工厂模式
  • Laravel Mix运行时关于es2015报错解决方案
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vue 重置组件到初始状态
  • vue2.0项目引入element-ui
  • 搭建gitbook 和 访问权限认证
  • 如何在GitHub上创建个人博客
  • 深度解析利用ES6进行Promise封装总结
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 一道闭包题引发的思考
  • nb
  • 1.Ext JS 建立web开发工程
  • 如何在招聘中考核.NET架构师
  • "无招胜有招"nbsp;史上最全的互…
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • $ git push -u origin master 推送到远程库出错
  • %@ page import=%的用法
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)Controller接口控制器详解(三)
  • (算法)前K大的和
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)iOS字体
  • (转)VC++中ondraw在什么时候调用的
  • (转)人的集合论——移山之道
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .libPaths()设置包加载目录
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .Net IE10 _doPostBack 未定义
  • .NET 表达式计算:Expression Evaluator
  • .NET 简介:跨平台、开源、高性能的开发平台