- 博客(37)
- 收藏
- 关注
原创 虚拟机会让程序更慢吗?
有不少人反对使用虚拟机,他们的观点有许多种,其中最主要的就是虚拟机会降低程序的执行性能。他们认为,编译型语言---如C语言---是以计算机自身的机器代码的形式执行的,因此会执行的更快些。但这种说法并不正确。 纯粹的C++代码并不一定比由虚拟机执行的字节码(bytecode)更快。道理很简单,程序的执行时间主要消耗在运行时库(run-time library)
2008-02-15 10:58:00 1331
转载 怎样在 C++ 中计算对象的实例化次数
Objects Counting in C++ 在 C++ 中,对某个 class 所产生出来的 objects保持正确的计数,是办得到的,除非你面对一些疯狂份子。译文保留原作时态,并未修改。以下是译文所采用的几个特别请读者注意的术语:client :
2008-01-26 20:11:00 1696
原创 利用C++模板技术支持多种计算策略
任何有经验的程序员和软件设计师都知道,在软件开发中最常见的困境的并不是在问题面前束手无策,而是在一大堆好像都可行的解决策略中选择一个。软件设计就是选择的过程,其困难之处也就在于你得不断地、小心翼翼地做出各种选择。在传统的程序设计模式下,每一次选择都是不可逆转的,你做出了选择,那么随后的开发都将会受到这次选择的剧烈影响。当你发现自己当初的选择错误的时候,可能一切都已经为时太晚。这有点像是走迷宫,而走
2008-01-26 20:09:00 603
转载 确定一个对象在使用前已经被初始化
C++ 看上去在对象的初始化方面变化无常。例如,如果你这样做,int x;在某些情形下,x 会被初始化(0),但是在其它情形下,也可能没有。如果你这样做,class Point { int x, y;};...Point p;p 的数据成员有时会被初始化(0),但有时没有。如果你从一个不存在未初始化对象的语言来到 C++,请注意这个问题,因为它非常重要。读取一个未初始化的值会引起未定义行为。在一
2008-01-26 20:07:00 534
转载 关于CString
通过阅读本文你可以学习如何有效地使用 CString。 CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。 使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CString的完全手册,
2008-01-26 20:05:00 455
原创 Data Alignment
#pragma pack Preface 很多 CPU ,如基于 Alpha, IA-64, MIPS, 和 SuperH 体系的,拒绝读取未对齐数据。当一个程序要求其中之一的 CPU 读取未对齐数据时,这时 CPU 会进入异常处理状态并且通知程序不能继续执行。举个例子,在 ARM, MIPS, 和 SH 硬件平台上,当操作系统被要求存取一个未对齐数据时默认通知应用程
2008-01-26 20:04:00 466
转载 为什么 char** 不能自动转化为 const char**
一次偶然的情况下我发现以下代码竟然无法被编译通过(如果你的编译器,比如VC6或VC2003,允许它编译通过,我想你首先应该换个编译器,比如GCC或VC2005):void foo( const char* [] ) { }int main( void ){ char* s[2]; foo( s );}简化成更一般的形式是:char** p1 = 0;const char** p2 =
2008-01-26 20:02:00 457
转载 一个C++ 内存泄漏检测器
内存泄漏对于C/C++程序员来说也可以算作是个永恒的话题了吧。在Windows下,MFC的一个很有用的功能就是能在程序运行结束时报告是否发生了内存泄漏。在Linux下,相对来说就没有那么容易使用的解决方案了:像mpatrol之类的现有工具,易用性、附加开销和性能都不是很理想。本文实现一个极易于使用、跨平台的C++内存泄漏检测器。并对相关的技术问题作一下探讨。基本使用对于下面这样的一个简单程序tes
2008-01-26 20:01:00 655
原创 谈谈C++内存泄漏
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较
2008-01-26 19:57:00 343
原创 调用规范与可变参数表
语言调用规范是指进行一次函数调用所采用的传递参数的方法,返回值的处理以及调用堆栈的清理。Microsoft C/C++ 语言中采用了五种调用规范,分别是__cdecl, __stdcall, __fastcall,thiscall和nake每一中调用规范都是利用eax作为返回值,如果函数返回值是64位的,则利用edx:eax对来返回值。Nake调用规范非常的灵活,足以独立
2008-01-26 19:56:00 284
原创 C++流格式控制
格式控制 当输入/输出的数据没有指定格式,它们都按缺省的格式输入/输出。然而,有时需要对数据格式进行控制。这时需利用ios类中定义的格式控制成员函数,通过调用它们来完成格式的设置。ios类的格式控制函数如下所示: long flags( ) const 返回当前的格式标志。
2008-01-26 19:52:00 625
原创 UNICODE字符输出???
这几天研究Unicode,勤快些,把看到的东西觉得有用的都copy了下来,文章是拼凑出来的,所以看起来会觉得有些乱 :)。 1. wprintfQ : sizeof(wchar_t) = ?A : 随编译器不同。(所以:在需要跨平台的时候尽量不用wchar_t) vc : sizeof(wchar_t) = 2;Q: 在vc中,为什么直接使用wprintf(L"测试1234")会没有结果
2008-01-26 19:51:00 1138 1
原创 关于'ab'的类型
今天看MSDN偶然间发现其中有这么一句:int mbch = ab; 对ab这种表示方法还是第一次见到(别见笑啊,呵呵):P并且它的类型是const int,这更让我感到迷惑。仔细研究了一番,稍微弄懂了一些,特地写下这篇文章记录一下。以备日后察看(VC6)。关于ab等字符常量的类型,周星星(bruceteen)说C++标准文档中是有规定的(具体我没有去翻阅文档),他
2008-01-26 19:49:00 804
转载 谈谈连接器是如何工作的
许多Visual C++的使用者都碰到过LNK2005:symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误,而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,而有的朋友可能知其然却不知其所以然,那么本文就试图为大家彻底解开关于它的种种疑惑。 大家都知道,从C/
2008-01-26 19:47:00 382
原创 Use Pseudoregisters to debug in MSVC++
IntroductionLets start with the reason why I wrote this article. One day, a colleague asked me to help him debug a problem he had. So I was watching him stepping in his code, when I noticed the fol
2008-01-26 19:46:00 323
转载 Class function callback
这篇文章介绍了如何使类中的非静态成员函数成为线程函数或者使其成为回调函数的方法,颇值得一读:IntroductionIn this article Ill show you how to make a callback to a function within a class that is NOT static. This will make use of functions, poi
2008-01-26 19:45:00 574
转载 typedef的四个用途和两个陷阱
用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;
2008-01-26 19:44:00 304
转载 c++ 重载决议与可访问性检查
对于如下的类:class ClxECS{public: double Test(double dValue) { return dValue * 13; };private: int Test(int iValue) { return iValue * 13; };}; 下面的函数输出是什么?void ECS_test(){ int iValue =
2008-01-26 19:42:00 381
转载 C++回调(CallBack)方案
跟诸如Object Pascal和Ada等其它一些语言不同,C++语言并没有内在地提供一种将类的方法作为回调函数使用的方案。在C语言中,这种回调函数被称作算子(functor),在事件驱动类程序中普遍存在。主要问题基于这样一个事实:某个类的多个实例各自位于内存的不同位置。这就需要在回调的时候不仅需要一个函数指针,同时也需要一个指针指向某个实例本身(译者注:否则回调时便无法知道目前正在操作的是哪个对
2008-01-26 19:39:00 436
原创 判断一个类中是否有某种类形
typedef char RT1; typedef struct { char a[ 2 ]; } RT2; //去引用template class NonRef{ public: typedef T NonRefX; }; template class NonRef{ public: typedef T NonRefX; }; // 选择这个版本返回值大小为1 template RT1 t
2008-01-26 19:37:00 365
转载 为数字加逗号分割
bruceteen的方法(使用一个如此设置的local):#include #include int main( void ){ using namespace std; cout locale chs( "chs" ); // chs在我这里行,不知道你那里怎么样 cout.imbue( chs ); cout }特别推荐 namtso的方法(
2008-01-26 19:36:00 709
原创 关于static成员变量
一直以为对static成员变量还算了解。直到昨晚看了《Effective C++》3rd Item49,才发现自己其实什么都不懂,真是惭愧!所以写下这篇随笔,为以后定期回顾参考,也希望大家不要犯类似的错误。先看以下代码:#include using namespace std;class Base{ static int itest;public:
2008-01-26 19:35:00 494
原创 模板杂记
本文专门记录学习过程中碰到的关于模板的一些技巧:1. 使用IsOfClassType类判断一个数据类型是否是class。template class IsOfClassType {public: template static char check(int U::*); template static float check(...);public: enum { Result
2008-01-26 19:34:00 247
原创 笑话
太阳公司的一个JAVA程序员与其女友恋爱多年,就要结婚了,可是结婚第二天,其女友就提出离婚。众人纳闷,何故?其女友曰:他没有指针。此JAVA程序员诧异的说:要指针干什么用?指针不安全!这是JAVA之父教导我们的,他说:“指针不安全!把你们的指针全割了吧”。众狂笑,曰,要告诉所有的女网友,千万别找JAVA程序员,他们没有指针。于是:百万名JAVA程序员被女友抛弃-------
2008-01-26 19:33:00 314
转载 C++中的名字查找
本文引用自:Herb Sutter 中文博客原文地址:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1677385 Vijay Visana最近发邮件问我两个问题。内容如下(为了更适合阅读,我做了简单修改。译者在此基础上又做了修改):我在C++的多继承上遇到了很大麻烦。如图1,A、B1和B2为纯抽象类;C从B1、B2多继承,且实现了
2008-01-26 19:32:00 704
原创 关于类的大小问题
一直以来在各个论坛上都不时的见过一些关于类大小的讨论,尤其是当涉及到虚继承时,类的大小就变得更加扑朔迷离,每看完一个帖子都觉得自己有所收获,但当下次遇到类似的帖子时却怎么也想不起自己以前对此问题的记忆了,于是乎,干脆勤快些一劳永逸地把他们记录下来。纯属个人理解,难免有错,我会定期更新这篇文章,修改其中的错误之处。本文仅供参考!也希望诸位高手多多纠正其中的错误。谢谢!关于类的大小问题,有些是和编
2008-01-26 19:30:00 492 1
原创 const修饰的谁?
问题源于今天我于csdn上看到的一个帖子:const引用的疑惑 例子1: #include #include using namespace std; typedef char* PCHAR ; int main(int argc, char *argv[]) { cout cout return 0; } 输出结果: char * char const
2008-01-26 19:27:00 334
转载 M$ Unicode参考
Initial Steps for Unicode-enabling Microsoft C/C++ Source Define _UNICODE, undefine _MBCS if defined. Convert literal strings to use L or _T Convert string functions to use Wide
2008-01-26 19:26:00 767
原创 函数指针与函数名
迷惑很久的问题了,今天正好又遇到这个问题,就抽了个时间研究总结了一下把它记录下来。和同学讨论一个typedef的问题,实验过程中偶然发现VS2005的行为:int fun(){ cout return 43;}int (*callback())(){//对 return fun; //returns function pointer}int (callback
2008-01-26 19:24:00 503
转载 星星写的俄罗斯方块
#include #include #include #include #include class Console{public: Console() { hStdOutput = INVALID_HANDLE_VALUE; hStdError = INVALID_HANDLE_VALUE; } bool Open( void )
2008-01-26 19:23:00 523
转载 一个编译问题
感觉这篇文章很不错,就转贴过来了。一个很巧妙的错误,欺骗编译器。作者: Panic 2006年7月27日很久没碰到什么有趣的问题了,今天看到一个,特写随笔一篇以作留念:P问题的来源: 一种让另外的类对本类成员只读,本类对本类成员可读写的方法。 [所有相关帖子]例子//a.hclass a{public: void test();#ifndef A_CPPconst#e
2008-01-26 19:20:00 382
转载 C++编译器如何实现异常处理
C++编译器如何实现异常处理作者:Vishal Kochhar 查看原文 翻译:局部变量注:本文在网上已经有几个译本,但都不完整,所以我决定自己把它翻译过来。虽然力求信、雅、达,但鉴于这是我的第一次翻译经历,不足之处敬请谅解并指出。 与传统语言相比,C++的一项革命性创新就是它支持异常处理。传统的错误处理方式经常满足不了要求,而异常处理则是一个极好的替代解决方案。
2008-01-26 19:18:00 367
原创 函数返回指向自己的指针
#include using namespace std;class FuncReturnItself;typedef FuncReturnItself (*pFunc)(void);class FuncReturnItself{public: FuncReturnItself( pFunc _p ){ _pFunc = _p; } operator pFunc(){ retu
2008-01-26 19:15:00 380
转载 DLL地狱及其解决方案
原作者:Ivan S Zapreev译者:陆其明介绍我曾经接受过一个任务,去解决一个DLL版本更新的问题————某个公司给用户提供了一套SDK,这个SDK是由一系列DLL组成的;DLL中导出了很多类,用户使用这些类(直接使用或派生新的子类)来继续他们的C++程序开发。用户在使用这些DLL时没有得到很详细的使用说明(比如使用这些DLL中导出的类有什么限制等)。当这些DLL更新为新的版本之后,
2008-01-26 19:13:00 351
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人