c++概要总结,持续更新



一、 
base data types(atom types)

from c++0x/c++2011standard.


typename


g++4.5-32bit


g++4.5-64bit


vc10.0-32bit


vc10.0-64bit


char


1


1


1


1


char16_t


2


2


2


2


char32_t


4


4


4


4


wchar_t


4


4


2


2


short


2


2


2


2


int


4


4


4


4


long


4


8


4


4


long long


8


8


8


8


float


4


4


4


4


double


8


8


8


8


long double


12


16


8


8


派生成员函数指针(单继承)


8


16


4


8


派生成员函数指针(多继承)


8


16


8


16


派生成员函数指针(虚继承)


8


16


12


16

二、     definefunction

#ifdef __linux__

#define
__stdcall __attribute__((__stdcall__))

#define
__thiscall __attribute__((__thiscall__))

#define
__cdecl __attribute__((__cdecl__))

#define
__fastcall __attribute__(__fastcall__))

#endif

RetType
call_convFuncName(ParamType
param);

example: RecursiveCall

int __cdeclcalc_sum(int sum,
inti)

{

if( 0 == i )

{

return sum;

}

sum += i;

return
calc_sum(sum, --i);

}

三、     control
statement

if( cond1)

{

statement1;

}

else if(cond2 )

{

statement2;

}

else

{

statement3;

}

四、     switch
usage

switch(flg )

{

case 1:

statement1;

break;

case
2:

statement2;

break;

default:

statement3;

}

五、     loopstatement

while(condition )

{

statements;

}

do
{

statements;

}
while( condition );

for( ;condition; )

{

statements;

}

loop:

statements;

if( condition )

{

goto loop;

}

六、     pitfallsand
knowledge

(1)thinking:

int i =1;

int j =(++i) + (i++) + (++i);

VC6.0/GNUgcc/g++: i = 4, j = 7

VS2005/2008/2010: i = 4, j = 9;

(2)thedifference of following statements:

char* lpszStr1 = "hello world";

const char* lpszStr2 = "helloworld";

char lpszStr3[] = "helloworld";

(3)thedifferent of pointer and reference

int i=0;

int& j=i;

int* k=&i;// int* k=&j;

ref,alias(the same entity) pointer,address(addressof entity)

In fact, the implement of pointer and referenceby assembly is the same. Such as following:

int i = 5;

int* pi = &i;

int ri = i;

The corresponding assembly code:

mov dword [i], 5

lea eax, [i]

mov dword ptr[pi], eax;

lea eax, dword ptr[i]

mov dword ptr[ri], eax

(4) enumtype

4 bytessigned in 32bit-program

8 bytes signed in 64bit-program

(5) macro

#define parse_to_string(macro_arg) #macro_arg

#define contact(arg1, arg2) arg1##arg2

(6)templatespecialization in class.

VisualStudio support explicit and implicit
specialization

GCC just support implicit specialization.

七、     c++0xstandard

vs2010 introduce:

1.lambda expression

genericsyntax:

[](ParaType
para) ->RetType//->RetType: specific return type

{

statements;

}

[] : lambdaexpr prefix

othersyntax:

(1)

int
local= 0;

int
result= [&](void) ->int

{

return ++local;

}();

or

int
result= [&local](void) ->int

{

return ++local;

}();

(2)

int
local= 0;

int
result= [=](void)
mutable ->int

{

return ++local;

}();

or

int
result= [local](void)
mutable->int

{

return ++local;

}();

2.static_assert

example:

template<typename
_Ty, typename _Tx>

_Typointer_cast(_Tx sptr)

{

static_assert(std::tr1::is_pointer<_Tx>::value&&

std::tr1::is_pointer<_Ty>::value,

“the type of src and dstoperand must be pointer”);

union
{

_Txs_ptr;

_Tyd_ptr;

} uData;

uData.s_ptr = sptr;

return
uData.d_ptr;

}

3.support new means for keyword: auto, type deduction.

example:

auto
i =3; // be similar to var in C#

4.rvalue, it can bind on a temporary.

example:

template<typename
T>

class
Integer

{

public:

Integer(void)

{

this->data = T();

}

Integer(const
T&data)

{

this->data = data;

}

Integer(const
Integer&integer)

{

this->data = integer.data;

}

bool operator==(const
Integer&integer)

{

return this->data == integer.data;

}

bool operator==(const Integer&&integer)

{

return *this == integer;

}

private:

T data;

};

5.decltype usage:

auto i =1;

auto j =1.0f;

typedef
decltype(j) JType;

gcc 4.5 ext support

6.new keywords: char16_t, char32_t

example:

char16_t
f[]= u”hello world!”;

char32_t
e[]= U”hello world!”;

八、     inlineasm
usage

Win32vc6.0, 8.0, 9.0, 10.0

int a = 3, b = 0;

__asm moveax, a;

__asm movb, eax;

Linux32

int
a =3, b = 0;

__asm__
[__volatile__](“movl %1, %0” : “=r”(b) : “m” (a));

or

asm
[volatile](“movl%1, %0” : “=r”(b) : “m”(a));

example:

template<typename bchar>

__declspec(naked)

int __cdecl _strlen(const bchar*)

{

__asm

{

movesi, dword ptr[esp + 4];

moveax, -1;

cmpesi, 0;

jzend__;

label:

movcl, byte ptr [esi];

incesi;

inceax;

cmpcl, 0;

jnzlabel;

end__:

ret;

}

}

template<typename wchar>

__declspec(naked)

int __cdecl _wcslen(const wchar*)

{

__asm

{

movesi, dword ptr[esp + 4];

moveax, -1;

cmpesi, 0;

jzend;

label:

movcx, word ptr [esi];

incesi;

inceax;

cmpcx, 0;

jnzlabel;

end:

ret;

}

}

template<typename bchar>

__declspec(naked)

char* __cdecl_strcpy(bchar*,
const bchar*, int)

{

__asm

{

movecx, dword ptr[esp + 12]

movesi, dword ptr[esp + 8];

movedi, dword ptr[esp + 4];

incecx;

repmovsb;

moveax, edi;

subeax, dword ptr[esp + 12];

deceax;

ret;

}

}

template<typename wchar>

__declspec(naked)

wchar_t* __cdecl_wcscpy(wchar*,
const wchar*, int)

{

__asm

{

movecx, dword ptr[esp + 12]

movesi, dword ptr[esp + 8];

movedi, dword ptr[esp + 4];

incecx;

repmovsw;

moveax, edi;

subeax, dword ptr[esp + 12];

subeax, dword ptr[esp + 12];

subeax, 2;

ret;

}

}

template<typename bchar>

__declspec(naked)

char* __cdecl_strcat(bchar*,
int, constbchar*,
int)

{

__asm

{

movecx, dword ptr[esp + 16];

movesi, dword ptr[esp + 12];

movedx, dword ptr[esp + 8];

movedi, dword ptr[esp + 4];

addedi, edx;

repmovsb;

movbyte ptr[edi], 0;

moveax, edi;

subeax, dword ptr[esp + 16];

subeax, edx;

ret;

}

}

template<typename wchar>

__declspec(naked)

wchar_t* __cdecl_wcscat(wchar*,
int, constwchar*,
int)

{

__asm

{

movecx, dword ptr[esp + 16];

movesi, dword ptr[esp + 12];

movedx, dword ptr[esp + 8];

addedx, dword ptr[esp + 8];

movedi, dword ptr[esp + 4];

addedi, edx;

repmovsw;

movword ptr[edi], 0;

moveax, edi;

subeax, dword ptr[esp + 16];

subeax, dword ptr[esp + 16];

subeax, edx;

ret;

}

}

c++概要总结,持续更新

时间: 2024-10-29 11:26:09

c++概要总结,持续更新的相关文章

软件测试知识点汇总目录(持续更新)

个人在工作之余通过word文档长期持续更新工作中需要涉及到的一些理论和技术知识.所谓好记记性,不如乱笔头.根据工作年限和职位的变化,以及就职公司参与的产品或者项目所涉及到的测试方面的技能不一样,会存在有些之前的技能不经常使用,会导致生疏的现象.虽然不至于归零,但是一旦需要使用的时候,有一个相对比较完整规范的文档来应急阅读来回顾其使用等是很有帮助的.比在网上搜索出来的相关零散的不完整的知识点方便的多. 文档创建年限不是很长,有很多知识项没有写入文档或者还没有来得及编写,需要在后续持续更新.文档编写

功能使用来源(持续更新)

从开始编写项目到现在,用过好多插件,但是有的时候用过后,时间一长就会忘记,这里我整理一下,以防忘记,我会持续更新的!!! 图表类: Jfreechart 适合java和jsp使用 界面差,不易维护,说白了,显示的就是一张图片: highcharts web使用,js插件,界面绚丽,官网有好多demo(当时没有找到这个,于是用的jfreechart...): echarts 近期找到的,百度制作,叫百度图说,我很看好这个,下次如有需要制作图表的时候,我一定用这个!!!这个也有好多的demo,我看了

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

2017年上半年软考报名时间汇总(持续更新)

全国2017年上半年软考报名时间汇总(持续更新) 关注报名时间:各省报名开始时间.结束时间不一. 关注报考科目:部分科目一年只考核一次. 关注考试时间:上半年时间为5月20日,及时开始应试准备. 最新 | 2017年上半年软考考试时间和主要考试科目 序号 地区 开始时间 结束时间 1 湖北 1月23日 4月15日 2 海南 2月13日 3月13日 3 四川 2月15日 3月15日 4 青海 2月27日 3月12日 5 浙江 3月1日 4月10日 6 山东 3月14日 3月23日 7 湖南 3月2

转-推荐的几个开发常用在线工具,可以提升开发效率(持续更新)

http://blog.csdn.net/kroclin/article/details/40634975 相信开发中每个人手头上面都有那么几个工具可以让你每天洋洋得意的开发软件,而这里我就将我觉得还挺不错的几款在线工具分享出来,仁者见仁啦,喜欢就拿走.还会持续更新,以后有新的我都贴上来. 1.MD5解密:http://www.cmd5.com/ 2.MD5加密:http://md5jiami.51240.com/ 3.json在线解析工具:http://json.parser.online.f

iOS开发系列文章(持续更新……)

iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大家交流,新建一个iOS技术交流群,欢迎大家加入:64555322 C语言 IOS开发系列--C语言之基础知识 IOS开发系列--C语言之数组和字符串 IOS开发系列--C语言之指针 IOS开发系列--C语言之预处理 IOS开发系列--C语言之存储方式和作用域 IOS开发系列--C语言之构造类型 Ob

linux学习资料持续更新中

一.LINUX基础教程 1.老男孩系列免费视频: 1) linux高薪入门实战视频教程(第二部)老男孩linux教程 http://edu.51cto.com/course/course_id-1035-page-1.html 2) 跟着老男孩从0开始一步步实战深入学习linux运维(三) http://edu.51cto.com/lesson/id-11909.html linux学习资料持续更新中,布布扣,bubuko.com

Linux系统各发行版镜像下载(持续更新)

Linux系统各发行版镜像下载(持续更新) http://www.linuxidc.com/Linux/2007-09/7399.htm Linux系统各发行版镜像下载(2014年10月更新),如果直接下载不了,请使用迅雷下载.并且注意,我的下载地址,在  迅雷 里才起作用. 包括Ubuntu,Fedora,SUSE,Red Hat Enterprise Linux,CentOS等. 中国大陆开源镜像站汇总 1.企业贡献: 搜狐开源镜像站:http://mirrors.sohu.com/网易开源

MongoDB学习——持续更新

參考MongoDB权威指南,学习阶段.大家多多交流问题.持续更新本文 MongoDB的长处 MongoDB具有丰富的数据模型,是面向文档的数据库. easy扩展.能够在多台server之间切割数据. 开发人员仅仅需专注于编写应用.假设须要更大的数据.仅仅需在集群中加入新机器,然后让数据库来处理剩下的事情. 具有丰富的功能,比方索引,存储JavaScript,聚合,固定集合.文件存储. 不支持联接(join)和复杂的多行事物. 卓越的性能是MongoDB的主要目标,默认的存储引擎使用了内存映射文件