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)未完待续。。。。

c++中的一些容易混淆的研究,布布扣,bubuko.com

时间: 2024-10-03 21:54:34

c++中的一些容易混淆的研究的相关文章

微软BI 之SSIS 系列 - 对于平面文件中 NULL 值处理过程中容易极易混淆的几个细节

最近有人问我 OLE DB Destination 中的 Keep Nulls 如何控制 NULL 值的显示,为什么选中了 Keep Nulls 但是数据库中没有 NULL 值? 为什么在 Flat File Source 中勾选上了 Retain null values from the source as null values in the data flow 但是为什么目标表上显示的是一个当前日期,而不是 NULL 值等等,单开此文来解释这些非常容易混淆的概念. 在比较纯粹的 ETL 项

Chromium中网页加载进度条研究

1.     Shell.java中有成员变量:mProgressDrawable. 该成员变量在方法:onFinishInflate中被初始化. 在该类中有方法:onLoadProgressChanged,该方法中对进度条的值进行改变,并且对刷新完成事件进行反馈. 2.     上面的这个方法是在cc文件中被调用的. 上面方法对应的cc方法是shell_android.cc文件中的LoadProgressChanged方法. voidShell::LoadProgressChanged(Web

Python中中文路径处理问题的研究

a = '你' 为 str 对象 a = u'你' 为 unicode 对象 1. >>> print 'u'  + '你' >>> u浣 输出乱码 2. >>> print 'u'  + u'你' >>> u你 正常 3. >>> print 'u你' >>> u浣 输出乱码 4. >>> print 'u你' + 'u' >>> u浣爑 输出乱码 5. >

js和java中正则表达式的易混淆点

js中正则表达式的使用 对表单中的值进行正则表达式匹配一般有两种方法: var reg = new RegExp(regStr); reg.test(value); 如下: var reg = new RegExp("\\d{3}"); reg.test("abc123def"); 结果:true 注:new RegExp中传的是正则表达式的字符串,\需要用\转义. str.match(regex);      如"abc123def".matc

Dotfuscator VS中自带的混淆器和压缩器简单介绍以及用法

Dotfuscator是VS里面一个自带的.NET混淆器和压缩器,它可以帮助您防止您的应用程序被反编译.同时,它还可以使得您的应用程序更加小巧以及高效. 闲话不多少了,下面介绍它的基础用法,从此让你编译后的程序变得更贱更神秘,大牛自行绕过啦,小虾可以看看学一下... 1:安装 下载并安装混淆器,这里有一个4.9破解版的(该软件来源于网络) 点击下载 提取码:a435 2:安装完毕后打开,如下图 3:选择你要加密混淆的DLL或EXE文件,我这里就直接用一个exe文件举例啦,如下图 \ 4:下边就开

Java中反射机制(Reflection)研究及源码演示

如下内容内容是关于 Java中反射机制(Reflection)研究及演示的内容. package com.jiangqq.reflection; import java.lang.reflect.Method; public class Reflection1 { public static void main(String[] args) throws Exception { Class<?> tClass = Class.forName("java.lang.Class"

傅里叶分析中几个容易混淆的概念

傅里叶分析可以说是信号处理最重要的基石之一.但傅里叶级数.傅里叶变换.离散时间傅里叶变换.离散傅里叶变换等几个有点像又有点不像的概念,不仅经常搞得初学者晕头转向,有时候让老手也有点糊涂. 在开篇之前,先简要介绍一下傅里叶分析有关的八卦旧闻.早在19世纪初,法国数学家.物理学家傅里叶在研究热传导问题的时候,就提出周期信号可以分解为许多个正弦函数的叠加.1807年,他把这个想法写成一篇论文投给了法兰西科学院.当时负责这篇文章审稿的有两位世界著名的法国数学家:拉普拉斯和拉格朗日.审稿的结果是拉普拉斯认

maven中添加proguard来混淆代码

只要下回插件并添加相应的配置文件即可.本文仅是做下相关记录 1.修改pom.xml添加插件 <plugin> <groupId>com.pyx4me</groupId> <artifactId>proguard-maven-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goa

WebGIS中矢量切图的初步研究

1.背景 在GIS领域,金字塔技术一直是一个基础性技术,WMTS规范专门制定了针对切片请求的格式.利用这种技术,前端可以快速展示出指定级别的地图或影像. 但是,由于切图本身是一张图片,图片上看似是兴趣点的要素根本无法进行前端交互.于是,针对兴趣点等矢量数据的展示,基本原理都是先获取到矢量的地理信息(比如GeoJson),在前端绘制(内核为一个element),于是该element便能进行鼠标响应等交互了. 2.矢量数据的一般展示方法 2.1 矢量数据按需请求 根据需要,每次向服务器(比如根据地理