(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                                                         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) 多线程中不断的申请Socket的套接字,不断的使用,会使用完,怎么办?

struct linger linger = {1, 0};
if(-1 == setsockopt( nSocketAccept, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger) ))
{
perror("SO_LINGER 1 Error");
continue;
}

对套接字加上如上语句即可,表示调用此方法closesocket(nSocketAccept)关闭套接字后是立即回收此套接字,不会等待系统时间的释放。

(5) unicode下c++格式化%S与%s的区别

如wprintf()与vswprintf()这些格式化方法中%S与%s是存在系统平台的差异的!

1、windows

使用%s时,printf是认为输入的字符串是单字符,而wprintf则认为是宽字符的

使用%S时,printf是认为输入的字符串为宽字符,而wprintf则认为是单字符的,正好与%s小写的s相反。

例如:  wprintf(L"%S", "abcd")    输出为abcd。  wprintf(L"%S", L"abcd")  输出是a

    (因为%S格式的wprintf认为输入的字节是单字节,所以把L"abcd"作为单字节的输入了,而本身真实输入的是宽字节的L"abcd",故输出就是a了)。

2、Linux

使用%s时,则printf与wprintf都认为输入的字符串是单字节的。

使用%S时,则printf与wprintf都认为输入的字符串是宽字节的。

例如:  wprintf(L"%S", L"abcd") 与 printf(L"%S", L"abcd")都是输出的为abcd。

好了,是不是觉得linux更对一些呢?天知道,又没有一个标准。

(6) wchar_t的占几个字节?

wchar_t的字节大小是与平台相关的。

Windows下是个字节(UTF-16)

Linux下是个字节(UTF-32)

但是Linux可以在使用 gcc 编译程序的时候再后面跟上 -fshort-wchar 来表示wchar_t是UTF-16编码。

(7)未完待续。。。。

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

  1. php中include文件变量作用域的研究

    原文:php中include文件变量作用域的研究 在php中我们有时候需要include一个文件.比如我前段时间在写一个框架的时候,打算用原生的php作为模板,然后写一个display方法引入模板文件 ...

  2. html中radio、checkbox选中状态研究(静下心来看,静下心来总结)

    html中radio.checkbox选中状态研究(静下心来看,静下心来总结) 一.总结 1.单选框的如果有多个checked 会以最后一个为准 2.js动态添加checked属性:不行:通过 $(& ...

  3. WebGIS中矢量切图的初步研究

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在GIS领域,金字塔技术一直是一个基础性技术,WMTS规范专 ...

  4. 关于 Delphi 中的Sender和易混淆的概念(转)

    /////////////////////////////////////////////////////// Delphi 中Sender对象的定义///////////////////////// ...

  5. 【Chromium中文文档】Web安全研究

    转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Extension_Sec ...

  6. maven中添加proguard来混淆代码

    只要下回插件并添加相应的配置文件即可.本文仅是做下相关记录 1.修改pom.xml添加插件 <plugin> <groupId>com.pyx4me</groupId&g ...

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

    开篇介绍 最近有人问我有关文件处理中空值处理的相关问题: OLE DB Destination 中的 Keep Nulls 如何控制 NULL 值的显示? 为什么选中了 Keep Nulls 但是数据 ...

  8. Java中关于HashMap源码的研究

    1.基础知识 1.数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1):数组的特点是:寻址容易,插入和删除困难. 2.链表 链表存储区间离散,占用内存比 ...

  9. html中radio、checkbox选中状态研究

    我们在web页面开发中经常需要让单选框.复选框进行选中或者不选中的操作, 我们可以在元素中添加checked属性 或者添加checked="checked" 都可以让某个选项默认选 ...

随机推荐

  1. 在object,embed上添加跳转链接(视频上添加跳转)

    今天遇到个问题,就是在视频上添加跳转链接时,谷歌浏览器能正常跳转,但是ie下,却无效,视频使用object引入,<a>标签跟随其后采用绝对定位,和平时的图片加跳转操作一样.原来是需要加上& ...

  2. JAVA中的正则表达式

    正则表达式:是字符串内容的匹配模板 正则表达式本身就是一个字符串 正则表达式的模糊符号: 一个[ ]代表一个字符,括号里面表示可以选择那些字符 { }用来表示前面这个正则表达式出现的次数 ?+* 这三 ...

  3. Callable与Future的介绍

    http://www.cnblogs.com/whgw/archive/2011/09/28/2194760.html

  4. 微信内嵌浏览器sessionid丢失问题,nginx ip_hash将所有请求转发到一台机器

    现象微信中打开网页,图形验证码填写后,经常提示错误,即使填写正确也会提示错误,并且是间歇性出现. 系统前期,用户使用主要集中在pc浏览器中,一直没有出现这样的问题.近期有部分用户是在微信中访问的,才出 ...

  5. 投影转换(AE)

    private void btnOK_Click(object sender, EventArgs e) { try { CheckError(); this.checkEdit1.Enabled = ...

  6. C++ void*的使用

    void*类型可以存储任何类型的指针,使用的时候强制转化成对应类型的指针便可. #include <iostream> #include <vector> using name ...

  7. Scala学习 —— 元组&映射

    再说集合之前,我们先来回顾一下映射&元祖 映射是键/值对偶的集合,Scala有一个通用的叫法--元组,也就是n个对象的聚集,并不一定要相同类型的.对偶不过是一个n=2的元祖.元祖对于那种需要将 ...

  8. MT5:放大市场价格指标

    指标把当前交易品种价格简单的放大显示在图表上.   //+------------------------------------------------------------------+//|  ...

  9. 跟小静读《jQuery权威指南》——目录

    前言 2014年开始了,年底给自己制订的学习计划,第一步先从学习<jQuery权威指南>开始. jQuery大家都很比较熟悉,但是我经常是边用的时候边对照着API,这次找本书通读一遍,记录 ...

  10. MVC5+EF6 入门完整教程十一:细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...