2008年04月
placement new 是重载operator new的一个标准、全局的版本阅读全文>
发表于 @ 2008年04月30日 20:57:00|评论(loading...)|编辑
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:<strong>static_cast</strong>、<strong>dynamic_cast</strong>、<strong>reinterpret_cast</strong>、和<strong>const_cast</strong>。下面对它们一一进行介绍。<br /><br /><span style="font-size: 16pt"><strong>static_cast</strong></span><br /><br />用法:<strong>static_cast </strong>< 阅读全文>
发表于 @ 2008年04月30日 17:37:00|评论(loading...)|编辑
<p>一个模板函数,把声明和定义分别放在.h文件和.cpp文件种,如果不调用这个函数的话,编译连接都能通过,但是如果调用这个函数的话,连接就有错误如下: </p><p>--------------------Configuration: IRSEG - Win32 Release------------------ -- Compiling... Location.cpp Linking... Location.obj&阅读全文>
发表于 @ 2008年04月30日 10:45:00|评论(loading...)|编辑
<p>cdecl、pascal、stdcall、fastcall等修饰符号到底什么意思呢?非常简单,就是关于堆栈的一些说明,首先是函数参数压栈顺序,其次是压入堆栈的内容由谁来清除,调用者还是函数自己?这些开关用来告诉编译器产生什么样的汇编代码。 </p><p>简单说明: </p><p>__cdecl是C/C++和MFC程序默认使用的调用约定,也可以在函数声明时加上__cdecl关键字来手工指定。采用__cdecl约定时,函数参数按照从右到左的顺序入栈,并且由调用函数者把参数弹出栈以清理堆栈。因此,实现可变参数的函数只能使用该调用约定。由于每一个使用__cdecl约定的函数都要包含清理堆栈的代码,所以产生的可执行文件大小会比较大。__cdecl可以写成_cdecl。 </p><p>__stdcall调用约定用于调用Win32 API阅读全文>
发表于 @ 2008年04月28日 10:08:00|评论(loading...)|编辑