首页 > 代码库 > c++中的一些容易混淆的研究
c++中的一些容易混淆的研究
(1)、TRUE/FALSE与ture/false以及NULL与null的区别是什么?
1、首先我们要了解true/false是标准c++中定义的关键字,在c语言中是没有bool类型的。
所以为了弥补C与C++中环境的差异,使代码方便移植(主要是为了c++编写的代码移植到C环境中),故在标准C++中定义了TRUE/FALSE宏。定义如下:
#define TRUE 1
#define FALSE 0
故TRUE/FALSE是宏(类型为int类型),而ture/false是标准c++的bool类型关键字。
2、NULL与null的区别看以下定义即可明白。
#ifndef NULL
#ifdef __cplusplus // c++平台
#define NULL 0
#else
#define NULL ((void *) 0) // 需要强制类型转换
#endif
#endif
故在工作中我们尽量用TRUE/FALSE来表示true/false,用NULL来表示null。
(2)_T("XXXX")与L"XXX"的区别
一般如果接触过c++的unicode方面的工作,会比较明白它们的区别,其实我们来看下 tchar.h文件中对 _T 这个宏的定义就会明白,大概就是:
#define _T(x) __T(x)
#ifdef _UNICODE
#define __T(x) L ## x
#else
#define __T(x) x
#endif
其实就是_T("XXX")是与平台相关的,如果你选择是unicode的编码环境,则表示为UTF-16的字符串,否则是ANSI的字符串格式。
而L"XXX"表示了它就是UTF-16字符串,与是否是unicode平台是无关的。所以根据具体情况选择合适的表示方式很重要。
(3)long类型在64位中到底是4个字节还是8个字节?
linux64 windows64 linux32 windows32
char 8 8 8 8
short 16 16 16 16
int 32 32 32 32
long 64 32 32 32
long long 64 64 64 64
size_t 64 64 32 32
void* 64 64 32 32
通过上面的表格内容,我们会发现
1、long类型64位的字节数是和平台相关的,win中是4个字节,linux中是8个字节
2、size_t的字节数是和平台的位深相关的,32位是4个字节,64位时8个字节。具体可以看size_t这个宏的定义即可明白。
3、指针的字节数也和平台的位深相关。
(4)未完待续。。。。