随笔分类 - C++
摘要:转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/一.各种容器的特性vector典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取、修改具有常数时间...
阅读全文
摘要:转:http://blog.csdn.net/lanxuezaipiao/article/details/41557307char c = '\72';中的\72代表一个字符,72是八进制数,代表ASCII码字符“:”。10*a++中a先进行乘法运算再自增(笔试中经常喜欢出这类运算符优先级容易混淆的...
阅读全文
摘要:http://www.cnblogs.com/chio/archive/2007/07/18/822389.html首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分.隐式类型转换 又称为“标准转换”,包括以下几种情况: 1) 算术转换(Arithmetic conv...
阅读全文
摘要:bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind. bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等 _...
阅读全文
摘要:http://blog.csdn.net/zhanghefu/article/details/5003383目录(?)[-]内存管理C内存管理详解内存分配方式分配方式简介明确区分堆与栈堆和栈究竟有什么区别控制C的内存分配重载全局的new和delete操作符为单个的类重载 new 和delete常见的内存错误及其对策指针与数组的对比修改内容内容复制与比较计算内存容量指针参数是如何传递内存的杜绝野指针有了mallocfree为什么还要newdelete内存耗尽怎么办mallocfree的使用要点newdelete的使用要点C中的健壮指针和资源管理第一条规则RAIISmart PointersRes
阅读全文
摘要:http://en.cppreference.com/w/
阅读全文
摘要:转自:http://coolshell.cn/articles/7992.html相信用过C++的程序员知道,C++的很多特性主要就是解决C语言中的各种不完美和缺陷:(注:C89、C99中许多的改进正是从C++中所引进的)用namespace解决了很C函数重名的问题。用const/inline/template代替了宏,解决了C语言中宏的各种坑。用const的类型解决了很多C语言中变量值莫名改变的问题。用引用代替指针,解决了C语言中指针的各种坑。这个在Java里得到彻底地体现。用强类型检查和四种转型,解决了C语言中乱转型的各种坑。用封装(构造,析构,拷贝构造,赋值重载)解决了C语言中各种复制一
阅读全文
摘要:http://blog.csdn.net/haoel/article/details/3081385目录(?)[-]重复继承钻石型多重虚拟继承结束语C++对象的内存布局(下)陈皓http://blog.csdn.net/haoel<<<点击这里查看上篇重复继承下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。下图是一个继承图,我们重载了父类的f()函数。其类继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节),一个是字符(1字节),而且还有自己的虚函数,自己overwrite父类的虚函数。如子类D中,f()覆盖了超类的函数,f1()和f2
阅读全文
摘要:http://blog.csdn.net/haoel/article/details/1948051目录(?)[-]前言对象的影响因素知识复习单一的一般继承多重继承C++对象的内存布局(上)陈皓http://blog.csdn.net/haoel点击这里查看下篇>>>前言07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便和简单。不想
阅读全文
摘要:http://coolshell.cn/articles/7965.html前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的:题目:请问下面的程序一共输出多少个“-”?1234567891011121314#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){int i;for(i=0; i<2; i++){fork();printf(&quo
阅读全文
摘要:http://preshing.com/20120612/an-introduction-to-lock-free-programmingLock-free programming is a challenge, not just because of the complexity of the task itself, but because of how difficult it can be to penetrate the subject in the first place.I was fortunate in that my first introduction to lock-f
阅读全文
摘要:http://blog.csdn.net/goodname008/article/details/50662Visual C/C++的编译器提供了几种函数调用约定,了解这些函数调用约定的含义及它们之间的区别可以帮助我们更好地调试程序。在这篇文章里,我就和大家共同探讨一些关于函数调用约定的内容。Visual C/C++的编译器支持如下的函数调用约定:关键字清理堆栈参数入栈顺序函数名称修饰(C)__cdecl调用函数右à左_函数名__stdcall被调用函数右à左_函数名@数字__fastcall被调用函数右à左@函数名@数字thiscall(非关键字)被调用函数右&
阅读全文
摘要:http://blog.sina.com.cn/s/blog_5fa3bba00100jkaa.html最大的区别就是__cdecl是由调用函数者释放堆栈,而__stdcall由被调用者释放。但是我们在调用任一种函数时,都没有进行显示的释放堆栈工作。这个工作由编译器完成,它帮我们生成了这个中间要使用的代码。这两种调用参数入栈方式一样, 都是先函数参数入栈,再是函数返回地址入栈,再是函数局部变量入栈。 这两种区别只是退栈时,谁来清除栈,这点不一样。 如下例子,是被调函数本身自己清除(比如stdcall那个汇编语句 ret 8),还是调用方清除(比如cdecl的add esp, 8)这点不一样。以
阅读全文
摘要:一、头文件 1、 一般来说,头文件仅仅用于声明,相应的定义要放在对应的cpp文件中。声明的内容一般可以是:1. 类定义体;2.类中的成员方法; 3. 类外的函数; 4. 类外的变量;5. 类型。一个文件(比如main.cpp)包含(#include)了一个头文件(比如item.h),就相当于声明了Item.h中声明的所有内容。 2、但是const常量,inline函数,static函数都可以在头文件中定义。二、cpp文件 用于定义; 定义的内容一般可以是:1、类的成员方法;2、类的静态变量;3、类外的函数;4、类外的变量;三、各种内容的定义总结 1. 类:类一般只在头文件中定义,在cpp中实现
阅读全文
摘要:我相信大家都有过这样的经历,在面试过程中,考官通常会给你一道题目,然后问你某个变量存储在什么地方,在内存中是如何存储的等等一系列问题。不仅仅是在面试中,学校里面的考试也会碰到同样的问题。如果你还不知道答案,请接着往下看。接下来,我们将在Linux操作系统上,以GCC编译器为例来讲解变量的存储。在计算机系统中,目标文件通常有三种形式:1.可重定位的目标文件:包含二进制代码和数据,与其他可重定位目标文件合并起来,创建一个可执行目标文件。2.可执行的目标文件:包含二进制代码和数据,其形式可以被直接拷贝到存储器中并执行3.共享目标文件:一种特殊的可重定位目标文件,即我们通常所说的动(静)态链接库一个典
阅读全文
摘要:昨天笔试遇到了关于c++中关于const与const_cast的题目,大概如下:int main(int argc, char* argv[]){ const int a = 10; int * p = const_cast<int *>(&a); *p = 1; printf("%d %d\n", a, *p); return 0;}求上述程序的输出结果,正确答案是:10 1分析如下:首先可以确定是p和&a的地址是指向同一片内存区域的,理论上来说最后的输出结果应该是1 1但是为什么会输出a的值为10呢? 猜测应该是const关键字的问题,可能编
阅读全文
摘要:原文链接一 C语言中存在着两种类型转换:隐式转换和显式转换隐式转换:不同数据类型之间赋值和运算,函数调用传递参数……编译器完成char ch;int i = ch;显示转换:在类型前增加 :(Type)变量 对变量进行的转换。用户显式增加char *pc = (char*)pb;void *ps = (void*)pa;二 C++中的类型转换 通过这两种方式,C语言中大部分的类型转换都可以顺利进行。至于能不能进行转换,转换后的结果如何,编译器不管需要用户自己去控制。 C++继承了C中的隐式和显式转换的方式。但这种转换并不是安全和严格的,加上C++本身对象模型的复杂性,C++增加了四个显示转..
阅读全文
摘要:在软件开发过程中,代码的命名规范是一项很突出的内容。一套定义完整、结构清晰明了的命名规范将大大提升源代码的可读性和软件的可维护性。据考证,没有一种命名规则可以让所有的程序员都满意,程序设计教科书一般也不会指定命名规则。但是制定一套令开发组成员基本满意的命名规则,并在项目中贯彻实施,也是团队开发一项必不可少的工作。我将我的团队的实际工作中的命名规则整理如下:第一部分:共性规则共有八项。作为指导供成员采纳。【规则1】标识符应简单明了,望文知意。标识符采用英文单词。切忌使用汉语拼音来命名。程序中的英文单词一般不要太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。尽量不要使
阅读全文
摘要:一、概述: 动态内存分配,特别是开发者经常接触的Malloc/Free接口的实现,对许多开发者来说,是一个永远的话题,而且有时候也是一个比较迷惑的问题,本文根据自己的理解,尝试简单的探究一下在嵌入式系统中,两类典型系统中动态内存分配以及Malloc/Free的实现机制。二、内存分配方式 Malloc/Free主要实现的是动态内存分配,要理解它们的工作机制,就必须先了解操作系统内存分配的基本原理。 在操作系统中,内存分配主要以下面三种方式存在: (1)静态存储区域分配。内存在程序编译的时候或者在操作系统初始化的时候就已经分配好,这块内存在程序的整个运行期间都存在,而且其大小不会改变,也不会被..
阅读全文
摘要:先通过一个小程序来看一看:#includevoid foo(int x, int y, int z){printf("x = %d at [%X]n", x, &x);printf("y = %d at [%X]n", y, &y);printf("z = %d at [%X]n", z, &z);}int main(int argc, char *argv[]){foo(100, 200, 300);return 0;}运行结果:x = 100 at [BFE28760]y = 200 at [BFE2876
阅读全文
浙公网安备 33010602011771号