C++基础知识
文章平均质量分 67
daichanglin
这个作者很懒,什么都没留下…
展开
-
最快速度找到内存泄漏
最快速度找到内存泄漏转载 2008-01-23 16:06:00 · 905 阅读 · 0 评论 -
C/C++函数调用方式
调用约定:__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。 1、__stdcall调用约定:函数的参数自右向转载 2007-08-21 01:39:00 · 833 阅读 · 0 评论 -
C 宏的一个特殊用法
#define abc(nihao) printf("" #nihao "")int _tmain(int argc, _TCHAR* argv[]){ abc(789654321); // 输出字符串789654321 abc(asfsahdfjdsfasldf); // 输出字符串asfsahdfjdsfasldf return 0;} 源码中偶尔原创 2007-07-10 15:09:00 · 716 阅读 · 0 评论 -
C++对象布局及多态实现之带虚函数的类
如果类中存在虚函数时,情况会怎样呢?我们知道当一个类中有虚函数时,编译器会为该类产生一个虚函数表,并在它的每一个对象中插入一个指向该虚函数表的指针,通常这个指针是插在对象的起始位置。所谓的虚函数表实际就是一个指针数组,其中的指针指向真正的函数起始地址。我们来验证一下,定义一个无成员变量的类C040,内含一个虚函数。 struct C转载 2007-07-06 15:18:00 · 742 阅读 · 0 评论 -
字符,字节和编码
[转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm]级别:中级摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。掌握编码问题的关键是正确地理转载 2007-04-04 16:28:00 · 570 阅读 · 0 评论 -
多字节和宽字节互相转换的方便方法
1.多字节 =》宽字节char szChar[1024];wchar szWChar[1024];...swprintf(szWChar, L"%S", szChar); // 注意大写S2.宽字节 =》多字节char szChar[1024];wchar szWChar[1024];...sprintf(szChar, "%S", szWChar); // 注意大写S原创 2007-04-04 17:23:00 · 1144 阅读 · 1 评论 -
告别cpp&h:hpp文件编写心得
hpp,顾名思义等于.h加上.cpp,在boost、Xerces等开源库中频繁出现,偶在机缘巧合之下,学得一招半式,遂记录如下,以供参考学习。 hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单转载 2007-02-25 14:14:00 · 1092 阅读 · 1 评论 -
字节对齐详解
http://www.yuanma.org/data/2006/0723/article_1213.htm原创 2006-12-30 10:10:00 · 991 阅读 · 0 评论 -
数据库设计三大范式应用实例剖析
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。 设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式来设计数据转载 2006-12-08 11:23:00 · 699 阅读 · 0 评论 -
C++的效率浅析
自从七十年代C语言诞生以来,一直以其灵活性、高效率和可移植性为软件开发人员所钟爱,成为系统软件开发的首选工具。而C++作为C语言的继承和发展,不仅保留了C语言的高度灵活、高效率和易于理解等诸多优点,还包含了几乎所有面向对象的特征,成为新一代软件系统构建的利器。 相对来说,C语言是一种简洁的语言,所涉及的概念和元素比较少,主要是:宏(macro)、指针(pointer)、结构(struc转载 2006-12-11 13:51:00 · 946 阅读 · 0 评论 -
深入浅出理解索引结构
(一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别: 其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查转载 2006-12-08 11:14:00 · 732 阅读 · 0 评论 -
list和用vector区别
stl提供了三个最基本的容器:vector,list,deque。vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。list就是数据结原创 2006-12-07 16:46:00 · 3865 阅读 · 0 评论 -
对C++程序内存管理的精雕细琢
应用程序分配内存的方法,对程序的执行性能有着深刻的影响。目前,通用的内存分配方法本质上已非常高效,但仍有改进的空间。 内存分配,不可一层不变 今天,对绝大多数程序来说,通用的内存分配方法--此处指代分配算符(Allocator:即malloc或new),已达到了理想的速度及满足了低碎片率的要求,然而,在内存分配领域,一丁点的信息都值得探讨很久,某些特定程序关于分配模式的信息,将有助于实现转载 2006-12-07 15:07:00 · 986 阅读 · 0 评论 -
STL中map用法详解
STL中map用法详解 说明:如果你具备一定的C++ template知识,即使你没有接触过STL,这个文章你也应该可能较轻易的看懂。本人水平有限,不当之处,望大家辅正。一.Map概述Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数转载 2007-06-11 13:16:00 · 1485 阅读 · 0 评论 -
C++资源之不完全导引
声明: .本文2004年5月首发于《CSDN开发高手》,版权归该杂志与《程序员》杂志社所有。杂志限于篇幅部分内容有所删节,此处版本为相对完整版本。 .本文为介绍性文章,会随笔者学习C++语言不断更新。转载 2007-06-11 12:51:00 · 1069 阅读 · 0 评论 -
C 和 C++ 字符串字面量的比较
C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。了解这些内容对于加深字符串字面量以及相关一些概念的理解、澄清一些常见的概念误区不无助益。本文以普通字符串字面量 "hello" 为例总结说明如下。 如果你发现了本文中的错误,或者对本文有什么感想或建议,可通过 whyglinux AT gmail DOT com 邮箱和作者联系。 相同点: [list][*]转载 2007-06-11 13:00:00 · 885 阅读 · 0 评论 -
C++内存管理
C++内存管理转载 2008-01-18 13:28:00 · 489 阅读 · 0 评论 -
OOP的黄昏
http://www.cppblog.com/longshanks/archive/2007/12/06/37915.aspx转载 2008-01-10 13:38:00 · 505 阅读 · 0 评论 -
GP技术的展望——道生一,一生二
http://www.cppblog.com/longshanks/archive/2008/01/06/40571.html转载 2008-01-10 13:37:00 · 555 阅读 · 0 评论 -
灵巧指针与内存回收
在JAVA 和 C# 中都有垃圾回收功能,程序员在分配一段内存后可以不再理会,而由垃圾回收自动回收,从而使程序员从复杂的内存管理中解脱出来。这是JAVA 和 C#的一大优点。而C++程序员在用 new 分配了一段内存后,还必须用 delete 释放,否则将造成资源泄漏。因此,一些C++ 书上经常告诫程序员:要养成好的习惯,new 与 delete 要成对出现,时刻记住将内存释放回系统。但是,事情只转载 2008-03-12 17:15:00 · 872 阅读 · 0 评论 -
内存与指针实质与联系.doc
第一篇 变量的内存实质一.先来理解C语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质,所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 13--------------------转载 2008-03-12 17:35:00 · 689 阅读 · 0 评论 -
C语言宏定义技巧
转载:http://blog.21ic.com/user1/69/archives/2006/13695.html写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重转载 2007-12-20 10:57:00 · 758 阅读 · 0 评论 -
内存调试技巧:C 语言最大难点揭秘
知识点 值类型。 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。 值类型超出作用范围系统自动释放内存。 主要由两类组成:结构,枚举(enum),结构分为以下几类: 整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Lo转载 2008-03-13 16:33:00 · 948 阅读 · 0 评论 -
在已分配的内存中构造一个对象
new的头文件可定义多达六种使用new的重载方式。其中两种方式-- placement new和placement new[] 可以使你在已分配的存储缓冲器中定义一个对象或者一组数组对象。 用placement new代替普通的new定义对象,在一些有时间限制的应用程序中起到了不小的作用,在那些程序中对象的定义要在一定的时间内完成。普通new定义的对象的生存时间是未定的,因而可能会造成操转载 2008-03-05 15:29:00 · 849 阅读 · 0 评论 -
实用单元测试技术
前言单元测试是高收益难实施的过程改进。之所以难实施,一个重要原因是理论与应用严重脱节,例如白盒覆盖,一般理论会介绍六七种覆盖率统计公式,并以极简单的代码为例,介绍实现这些覆盖的方法,但要将这些方法应用到普通的三四十行代码的程序中,根本就不现实。越复杂的程序越需要充分测试,只能应用于简单代码的测试技术有什么意义呢? 理想的单元测试理论体系应该符合以下标准: 实用,即能应用于转载 2008-02-21 17:22:00 · 4725 阅读 · 1 评论 -
CPPUnit
CppUnit - 测试驱动开发入门 CppUnitCookbook中文版CppUnit使用指南 CppUnit的使用步骤 CppUnit安装手册 试用CppUnit--一个简单的例子 CppUnit测试框架入门 cppunit helloworld详尽篇 CppUnit 介绍 CppUnit入门实践-Tony与Alex的对话系列 我对CPPUNIT的一些理转载 2008-02-14 09:17:00 · 793 阅读 · 0 评论 -
开发人员行走Unix的随身四艺
Unix系统永远只会越来越多,开发人员就没必要特意学习它们的安装、配置和管理了,就全部交给集成人员吧。 但开发人员行走于Unix之间,依然有四样东西要熟练。 一、VI 虽然Unix上的文本编辑器已经越来越好用,但不在Console前面,网速也不够连XWindows的时候,还是要依赖VI。 回想VI的时代背景,发现VI对开发人员已经周到得离谱了,热键多到你双转载 2007-06-14 13:20:00 · 697 阅读 · 0 评论 -
C/C++ make问题
Make or AutoMake 用过Java的Ant后,想起Make就觉得很烦,很厌倦。总归还是会的,见《GNU Make 3.8.0 中文手册》 不过即使make已经精通到变态,每个人写出来的MakeFile还是千奇百怪,再看看开源项目们个个都是automake+autoconf了,我们自己也长进一点吧。手工编写MakeFile.am,让auotomake变成M转载 2007-06-14 13:16:00 · 926 阅读 · 0 评论 -
c++程序的内存分配
1 、栈区( stack ) 由编译器自动分配释放 , 存放函数的参数值,局部变量的值等。 其操作方式类似于 数据结构 中的栈。 2 、堆区( heap ) 由程序员分配释放, 若程序员不释放,程序结束时可由 OS 回收 。 存放的是动态分配的数据对象。 注意它与数据结构中的堆是两回事转载 2006-12-07 15:00:00 · 761 阅读 · 0 评论 -
sizeof 和 alignment(对齐)
sizeof 和 alignment(对齐)1: alignment的定义 alignment指的是对象的开始地址必须满足条件: >>#pragma pack(push, 1) >>#pragma pack(push, 2) >>#pragma pack(push, 4) >>#pragma pack(push, 8) 2: 基本类转载 2006-12-07 14:55:00 · 999 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态转载 2006-12-07 14:50:00 · 637 阅读 · 0 评论 -
类模版成员特化示例
// 类模版的某个成员函数不适用于某种类型时,可以对该成员函数针对类型进行特化.// 示例:using namespace std;class CExcepter {};template class CTempl{public: CTempl() {} ~CTempl() {}public: void FunName() { std::cout }};// 假设类模板的成员函原创 2006-11-15 11:17:00 · 881 阅读 · 0 评论 -
C++基本功:全面掌握const、volatile和mutable关键字
C++程式设计过程中,const的使用可以频度是非常高的.它在保证程式安全方面起到了不可估量的作用.用一句话来表达最确切不过了:”小兵立大功”. 有了const,那么mutable当然缺不了. 然作为const的同胞兄弟,volatile却在很多人的视野中消失.其实volatile担负的责任有何尝小呢? 自然,它们的用法多样而灵巧,以至新手迷惑久久,下面就来系统的探讨总结一下吧:转载 2006-11-14 19:44:00 · 749 阅读 · 0 评论 -
理解C++面向对象程序设计中的抽象理论
很多书在一开始就开始学习josephus问题,为了让大家前面学起来较为容易我把前面涉及到此问题的地方都故意去掉了,现在我们已经学习过了结构体和类,所以放在这里学习可能更合适一些。 在正式开始学习之前我们先回顾一下如何利用数组和结构体的方式来解决,最后我们再看一下如何利用面向对象的抽象理念进行解决此问题的程序设计,相互对比,找出效率最高,最容易理解,最方便维护的程序来,说明利用面向对象的抽象理念原创 2006-11-13 22:09:00 · 1157 阅读 · 0 评论 -
教你理解复杂的C/C++声明
介绍[被屏蔽广告] 曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 需要强调一下的是,复杂的C/C+转载 2006-11-13 22:06:00 · 752 阅读 · 0 评论 -
如何编写异常安全的C++代码
关于C++中异常的争论何其多也,但往往是一些不合事实的误解。异常曾经是一个难以用好的语言特性,幸运的是,随着C++社区经验的积累,今天我们已经有足够的知识轻松编写异常安全的代码了,而且编写异常安全的代码一般也不会对性能造成影响。 使用异常还是返回错误码?这是个争论不休的话题。大家一定听说过这样的说法:只有在真正异常的时候,才使用异常。那什么是“真正异常的时候”?在回答这个问题以前,让我们先看转载 2006-11-13 21:53:00 · 641 阅读 · 0 评论 -
类模版偏特化示例
using namespace std;templateclass CTempl {public: void Fun() { std::cout " }};// 模版特化情形1templateclass CTempl {public: void Fun() { std::cout " }};// 模版特化情形2templateclass CTempl {public: void原创 2006-11-15 12:25:00 · 838 阅读 · 0 评论 -
关于volatile关键字的说明以及测试
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int volatile nVint;当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使转载 2006-11-14 19:46:00 · 692 阅读 · 0 评论 -
C++ 扩展和嵌入 Python
http://www.vckbase.com/document/viewdoc/?id=1540原创 2006-10-24 23:46:00 · 584 阅读 · 0 评论 -
指针专题
http://www.vckbase.com/document/viewdoc/?id=1652原创 2006-10-24 23:40:00 · 572 阅读 · 0 评论