C++系列
文章平均质量分 67
fhxd
这个作者很懒,什么都没留下…
展开
-
谈VC++对象模型
*本想写一篇探究VC++对象模型的文章,结果发现老外早就写了,而且有个网友还翻译过来了。原文思路清晰,讲解到位,译文也是无可挑剔,遂转载供大家参考。原文地址:http://www.cnblogs.com/DylanWind/archive/2009/01/12/1373919.html ——谈VC++对象模型(美)简 · 格雷程化 译译者前言一个C++程序员,想要进一转载 2012-08-27 22:41:50 · 1206 阅读 · 0 评论 -
浅谈C语言的数据存储
程序由指令和数据组成,C语言程序亦是如此。开发者在编写程序的时候往往需要根据不同数据的特点以及程序需求来选择不同的数据存储方式,那么在C语言中数据的存储分为哪些方式呢?C程序大致来讲可以分为四个数据区:常量区,静态去,堆区,栈区。其中常量区存储了未被作为初始化使用的字符串常量和被const修饰的全局变量,其特点是只可被访问不可被写入,生命周期同程序的运行过程。静态区存储了全转载 2013-02-27 11:43:18 · 9040 阅读 · 1 评论 -
深度剖析一个典型的C/C++程序的编译、链接以及执行的过程
一 开篇:关于C/C++程序的运行原理一直困扰着我,由于不明白其运行机制,在写程序的时候总给我一种空中楼阁的感觉。于是,很早就有写一篇关于剖析C/C++程序的编译、链接以及执行的过程的文章的想法(虽然这个问题其它人已经研究透了,但是本着学习的态度,自己动手总结一下还是有好处的),但一直不敢提笔。究其原因,觉得这个主题太大,涉及的知识面太广,要想把这个问题说清楚不容易。再者,当时感觉自己水平太欠原创 2013-02-28 11:45:48 · 1063 阅读 · 1 评论 -
如何学习STL
其实STL并不是很难学. 如果你不太愿意购买大部头著作阅读, 那么, "Essential xxx", "xxx in a Nutshell"之类简明扼要的文章书籍就很有帮助了. 我在CSDN文档区看到一篇 Using STL的译文, Kary翻译, 很简短, 用于了解STL基本概念挺合适的. 侯捷先生也写了 STL系列文章 (请到 http://jjhou.csdn.net 使用浏转载 2013-11-22 21:17:10 · 5422 阅读 · 0 评论 -
C++ 命名空间namespace
命名空间在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。MFC中并没有使用命名空间,但是在.NET框架、MC++和C++/CLI中,都大量使用了命名转载 2013-11-24 10:43:51 · 663 阅读 · 0 评论 -
C++中placement new操作符(经典)
placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; } 首先我们区分下几个容易混淆的关键词:new、转载 2013-12-21 10:45:46 · 553 阅读 · 0 评论 -
200 行 C 代码编写你的第一个垃圾收集器
每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。通常情况下,这些事情都是些我能够编写并实现的独立的小程序。一天早上,我几乎要被一堆事情给整疯了——我得看一本书、处理一些工作上的事情、还要准备一场Strange Loop的演讲,然后这时我突然想到:“我该写一个垃圾收集器了”。是的,我知道那一刻让我看上去有多疯狂。不过我转载 2013-12-22 12:04:00 · 973 阅读 · 0 评论 -
C++—模板特化和偏特化
1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛的关注、应用和研究。理解和掌握模板是学习、应用和研究以及扩充STL的基础。而STL模板实例中又充斥着大量的模板特化和偏特化。2.模板的定义(1) 类模板定义一个栈的类模板,它可以用来容纳不同的数据类型转载 2013-12-25 17:21:43 · 585 阅读 · 0 评论 -
C++函数模板的参数推导
在写作泛型函数或代码时,我们可能存在这样的需要:与参数相关的其它类型,比如一个迭代器的值的类型。本文要向大家展示一个函数模板推导机制使用技法,这个在STL的许多排序算法中广泛使用,当然大家也可能在不小心地使用,这此把它点破,以让大家可以更有意识地去使用这个在大师那里已经轻车熟路的技法。考虑一个情况,我们在写一个泛型函数,它接受一对迭代器,要做的事就是对这一对迭代器之间的元素进行排序转载 2013-12-25 17:18:53 · 710 阅读 · 0 评论 -
C++—Traits编程技法
——这篇是直接根据侯捷老师的书写的,几乎没有自己加工的部分,不过也是学习的总结吧Traits编程技法按照顺序,这次应该是迭代器Iterator的内容了,然而Iterator涉及到一个重要的技巧就是Traits编程技法;它还是值得单独一章来介绍一下的。一 获取Iterator的相应类型(associate type)在使用Iterator时,可能需要知道它的相应类型,也就是Itera转载 2013-12-25 17:22:47 · 777 阅读 · 0 评论 -
C++——函数对象(仿函数)
标准库里的count_if可以统计容器中满足特定条件的元素的个数。例如要统计一个整数vector——ivec中正数的个数,可以先写一个返回类型为bool,含有一个int参数的条件函数:bool pred(int val){ return val>0;}之后可以用count_if(ivec.begin(),ivec.end(),pred)计算出正整数的个数。但这个方法有转载 2013-12-25 17:17:20 · 597 阅读 · 0 评论 -
C++函数对象
标准库里的count_if可以统计容器中满足特定条件的元素的个数。例如要统计一个整数vector——ivec中正数的个数,可以先写一个返回类型为bool,含有一个int参数的条件函数:bool pred(int val){ return val>0;}之后可以用count_if(ivec.begin(),ivec.end(),pred)计算出正整数的个数。但这个方法有转载 2013-12-25 17:20:15 · 529 阅读 · 0 评论 -
static_cast和reinterpret_cast
[cpp] view plaincopy static_cast和reinterpret_cast揭秘 收藏 本文讨论static_castreinterpret_cast reinterpret_cast可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最转载 2014-02-13 10:11:21 · 634 阅读 · 0 评论 -
如何在程序中合理的使用空格
以下是google工程师在编程过程中对空格使用的约定:1. Horizontal Whitespace(水平留白)水平方向空格的使用取决于具体的位置。不要在一行代码的结尾处放置空格。一般的:void f(bool b) { //在大括号的前面应该总是有一个空格 ...int i = 0; // 分号前面通常不放空格int x[] = { 0 }; // 在翻译 2013-02-25 17:37:29 · 3001 阅读 · 0 评论 -
No symbol table is loaded. Use the "file" command.解决方法
问题描述:今天在用makefile编译文件,使用GDB进行调试,在设置断点时出现以下问题:No symbol table is loaded. Use the "file" command.解决方法:后来发现是编译时没有正确设置-g选项,这个-g选项不能直接放在编译命令中,要在makefile的开头定义CFLAGS 变量:CFLAGS = -g ,这样list命令才能列出源代码。(具体原原创 2013-01-17 12:14:03 · 27009 阅读 · 0 评论 -
undefined reference to 'pthread_create'问题解决
由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:undefined reference to 'pthread_create'undefined reference to 'pthread_join'问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthrea转载 2013-01-13 13:55:55 · 665 阅读 · 0 评论 -
已有VC++工程中如何添加BCG界面库
原文地址:http://www.cnblogs.com/carekee/articles/1751805.html(转载者注)推荐在MFC中加入BCG,而不是适用BCG建立工程,因为BCG对中文的支持不是很好,到时候会很麻烦。本文以MDI应用程序为例说明如何在已有的VC++工程中使用BCG界面库,我的开发环境为VS2003(在VC6.0下同样适用)。 1,将BCG/BCGCB转载 2012-09-04 21:20:15 · 5533 阅读 · 0 评论 -
修改MFC标题栏上的图标和修改MFC窗口标题
原文请见:http://hi.baidu.com/laoyang1018/item/744bfe6b6c77db156895e6b8修改MFC标题栏上的图标和修改MFC窗口标题MFC程序的默认的标题是“无标题-title”,其中title是应用程序的名称,我们应如何修改MFC窗口标题来符合自己的要求? MFC程序的文档类中定义了一个虚函数SetTitle,用于设置窗口标题转载 2012-09-02 16:29:40 · 1217 阅读 · 0 评论 -
读完《深度探索C++对象模型》第一遍感悟
今天晚上终于将《深度探索C++对象模型》读完了第一遍。回想一个月之前,因为在做项目的过程中,感觉由于对C++的相关实现机制不太了解,所以写出的程序感觉心里不踏实,有时候想优化但不知道如何下手。于是当时非常渴望了解C++底层的实现机制。但是不知道看那本书好,偶然间想起侯捷先生,因为之前逛书店的时候看过侯捷先生译的《深入浅出MFC》,并且了解到侯捷先生一直都专注于C++经典书籍的翻译。所以遂上网查侯捷原创 2012-10-31 21:29:33 · 871 阅读 · 0 评论 -
C++指针解惑
之前在使用指针的时候,常常对指针的类型感到困惑,既然所有的指针都只占4个字节,那么他所对应的指针类型在指针转化过程中有什么作用呢。最近,终于弄懂了他们的关系,相关说明如下:1.前提首先定义了一个ZooAnimal类如下:class ZooAnimal{ public: ZooAnimal(); virtual ~ZooAnimal(); virtual void ro原创 2012-10-23 23:14:38 · 1210 阅读 · 0 评论 -
Copy Constructor解惑
一 Copy Constructor的定义:拷贝构造函数的第一个参数与调用的class object 类型相同,可以有多个形参,但是后面的参数都需要提供默认值。例如:X::X(const X& x);Y::Y(const Y&y,int temp=0);在大部分情况下,当一个class object以另一个同类实体作为初值时,上述的constructor会被调用。二原创 2012-10-23 20:56:58 · 3062 阅读 · 0 评论 -
C/C++如何交换两个数的指定字节(2.59)
//2.59#include using namespace std;#define byte_pointer unsigned char *//判断当前计算机是大端存储还是小端存储int is_little_endian(){int tempi=1;return(*(byte_pointer)&tempi);}//输出指定数的各字节的16进制表示bool show_byt原创 2012-11-15 23:19:09 · 1230 阅读 · 0 评论 -
当x中包含偶数个1返回1,否则返回0
题目描述:/* Return 1 when x contains an even number of 1s;0 otherwise. Assume W=32 */int even_ones(unsigned x);函数应该遵循位级整数编码规则,不过你可以假设数据类型int 有w=32位。你的代码最多只能包含12个算术运算、位运算和逻辑运算。代码如下:bool OddOn原创 2012-11-17 21:34:36 · 4765 阅读 · 0 评论 -
缓存溢出攻击实例
#include using namespace std;//缓存溢出攻击int main(int argc,char *argv[]){int flag=0;char buffer[7];strcpy(buffer,argv[1]);if(0==strcmp("pxhero",buffer)){flag=1;}if(flag){cout << "code corret原创 2012-11-17 11:55:08 · 744 阅读 · 0 评论 -
2.66 表示在x二进制表示中最左端1的掩码
题目:Generate mask indicating leftmost 1 in x.Assume w=32.For example 0xFF00 -> 0x8000,and 0x6600 --> 0x4000要求,代码中最多只能包含15个算术运算符、位运算和逻辑运算方法一:int leftmost_one(unsigned x){int result=x;if(0!=x)原创 2012-11-18 23:48:07 · 2171 阅读 · 2 评论 -
VC6.0中友元函数无法访问类私有成员的解决办法
今天又碰到这个问题,由于以前没有记笔记的习惯,所以碰到这个问题之后纠结了很久。友元函数本来就是给那些既需要访问类成员而又不能作为相关类的成员的函数或者类来访问类私有变量的方法。从这儿可以看出,友元函数会破坏类的封装性,所以还是少用为妙。#include "iostream"using namespace std;class MyClass{public: double val;原创 2012-11-21 16:56:03 · 4677 阅读 · 0 评论 -
写代码犹如写文章
原文:http://book.douban.com/review/5199308/本书中Bob大叔提倡”写代码犹如写文章“,又说道“大师级程序员把系统当故事来讲,而不是当做程序来写”,对此观点我印象深刻!在此之前我从未听说过可以把代码当成故事、文章来写,Bob大叔太有才了! 如何才能写出整洁代码呢?总的原则无非是KISS(Keep It Simple Stupid):让代码简转载 2012-11-22 23:05:24 · 575 阅读 · 0 评论 -
C/C++编程规范
GENERAL-------Use real tabs that equal 4 spaces.Use typically trailing braces everywhere (if, else, functions, structures, typedefs, class definitions, etc.)if ( x ) {}The else statement starts转载 2013-01-24 16:37:59 · 914 阅读 · 0 评论 -
C语言变长数组 struct中char data[0]的用法
今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术。下面是我在网上找到的一篇讲解很清楚的文章。在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。struct MyData { int nLen; char原创 2014-02-14 11:00:12 · 4831 阅读 · 2 评论