C/C++
eastlhu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++之const限定符(顶层const,底层const)
C++之const限定符(顶层const,底层const)const初始化const的特点:用const加以限定的变量,无法改变。由于const对象定义之后就无法改变,所以必须对其进行初始化。const对象的常量特征仅在尝试改变它的时候表现出来,其他时候和变量无异。const初始化:const int bufSize = 512; //bufSize无法再改变const仅在本文件中有效const对...转载 2018-05-28 22:35:25 · 344 阅读 · 0 评论 -
C++ 内存池 -- C++ Memory Pool
这是我翻译的文章,来自 Code Project, 原文作者: DanDanger2000. 原文链接: http://www.codeproject.com/cpp/MemoryPool.asp C++ 内存池 l 下载示例工程 – 105Kb l 下载源代码 – 17.3Kb 目录 l 引言 l 它怎样工作 l 示例 l 使用这些代码转载 2014-07-23 17:29:44 · 809 阅读 · 0 评论 -
C++函数重定义、重载、重写的区别
1. 重写 (override):垂直关系 这是描述父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数,必须同名同参。 1) 被重写的函数不能是 static 的。必须是 virtual 的 ( 即函数在最原始的基类中被声明为 virtual ) 。 2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型) 3) 重写函数的访问修饰符可以原创 2014-02-28 20:53:28 · 1141 阅读 · 0 评论 -
构造函数初始化列表顺序
构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个被定义的成员先被初始化,依次类推。一般,初始化的顺序无关紧要,然而,如果一个成员是根据其他成员而初始化,则成员的初始化顺序是至关重要的。 class x { int i;//声明顺序是先i,后j,故初始化列表中,会先初始化i,再初始化j int j; public:原创 2014-02-28 21:38:44 · 1674 阅读 · 0 评论 -
C++中的前缀、中缀、后缀表达式转换
35,15,+,80,70,-,*,20,/ //后缀表达方式 (((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16 等进制不知所措一样~~!转载 2014-03-01 22:49:00 · 3263 阅读 · 2 评论 -
C++中动态定义一维数组,二维数组,三维数组
//动态定义一维数组、二维数组、三维数组 #include #include using namespace std ; int main() { int hight , row , col ; register int i , j , k ; srand((unsigned)time(NULL)) ; cout<<"输入一维数组的行"<<endl; cin>>row ; //动态定义一维数组转载 2014-04-03 13:54:11 · 1072 阅读 · 0 评论 -
大端模式与小端模式
在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机 通信领 域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正 确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian,下面先从字节序说起。 一、什么转载 2014-06-04 22:38:30 · 598 阅读 · 0 评论 -
向量Vector的实现
在项目中需要使用向量的时候,可以使用C++自带的vector.h来实现向量的存储,也可以自己实现向量的类。。 下面给出自己定义的向量类,需要什么函数都可以自己定义,是不是来的很方便呢。。。。: [cpp] view plaincopy /********************************************************************原创 2014-06-04 22:05:13 · 750 阅读 · 0 评论 -
实现string类过程中的一些疑问和总结
为什么operator>不能做为类的操作符重载呢,为什么一定还要声明为friend呢?原创 2014-06-04 21:23:20 · 682 阅读 · 0 评论 -
C/C++中容易造成内存溢出的函数
1.strcpy() strcpy()函数将源字符串复制到缓冲区。没有指定要复制字符的具体数目。复制字符的数目直接取决于源字符串中的数目。如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会陷入大的麻烦中! 建议使用strncpy. 2.strcat() strcat()函数非常类似于 strcpy(),除了它可以将一个字符串合并到缓冲区末尾。它也有一个类似的、更安全的替代方法转载 2014-06-03 21:42:52 · 2268 阅读 · 0 评论 -
Linux下 fcntl 函数用法说明
功能描述:根据文件描述词来操作文件的特性。 文件控制函数 fcntl -- file control LIBRARY Standard C Library (libc, -lc) SYNOPSIS #include ; int fcntl(int fd, int cmd); in转载 2014-06-04 17:47:32 · 747 阅读 · 0 评论 -
C++中的explicit
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 ,2 是个默认且隐含的类型转换操作符。 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。 这样看起来好象很酷, 很方便。 但在某些情况下(转载 2014-06-04 21:54:30 · 613 阅读 · 0 评论 -
大端存储和小端存储,网络字节序
不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 最常见的有两种 1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字节存储在起始地址 LE little-endian 最符合人的思维的字节序 地址低位存储值的低位 地址高位存储值的高位 怎么讲是最符合人的思维的字节序,是因为从人的第一观感转载 2014-03-03 21:07:55 · 4077 阅读 · 0 评论 -
大端模式,小端模式详解
一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必转载 2014-03-02 17:44:08 · 769 阅读 · 0 评论 -
释放对象数组:delete与delete[]
<<c++ primer>>练习 14.11 中提到: Account *parray=new Account[100]; delete parray; delete [] parray; 方括号的存在会使编译器获取数组大小(size)然后析构函数再被依次应用在每个元素上,一共size次。否则,只有一个元素被析构。 无论哪种情况,分配的全部空间被...转载 2018-05-28 21:33:22 · 5843 阅读 · 0 评论 -
c/c++ 开发中常见的坑
语言类 变量初始化问题 众所周知,局部变量在函数调用开始时创建,函数调用完成返回时“销毁”。值得注意的是,这里根本没有所谓的销毁、初始化的过程。局部变量的内存分配、回收是通过栈指针(esp)的减小、增大来完成的,注意函数栈从大地址向小地址增长。也就是说,函数栈只管分配和回收,至于这个地址空间里的内容, 它不关心,初始化工作要由程序员完成。同理,由malloc分配的空间,初始化工作也转载 2017-05-21 20:00:18 · 778 阅读 · 0 评论 -
C++ 带符号和无符号char类型赋值超出表示范围的情况
在C++中字符型被分为了三种:char、signed char和unsigned char。需要的注意:字符的表现形式只有两种:带符号的和无符号的,类型char具体使用哪一种由编译器决定;如果需要使用不大的整数,应该明确指出它的类型是signed char或者unsigned char。关于带符号类型:带符号类型在表示范围内正值和负值的量应该平衡,例如,8比特理论上应该可以表示-127至127,大...原创 2017-05-30 11:35:32 · 7341 阅读 · 2 评论 -
do{...}while(0)的意义和用法
linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需要定义这样一个宏:#define DOS...转载 2017-02-22 10:18:52 · 636 阅读 · 0 评论 -
值得推荐的C/C++框架和库
值得学习的C语言开源项目 Libevent libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。 下载链接:https://github.com/lib转载 2016-10-28 15:04:11 · 1739 阅读 · 0 评论 -
深入理解C++的动态绑定和静态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。 需要理解四个名词: 1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。 2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。 关于对象的静态类型和动态类型,看一个示例: [cpp] vi转载 2016-11-03 09:45:55 · 351 阅读 · 0 评论 -
C++ typedef用法小结
第一、四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针转载 2016-07-28 15:32:19 · 327 阅读 · 0 评论 -
指针函数与函数指针的区别
一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函转载 2016-07-19 17:20:51 · 315 阅读 · 0 评论 -
C/C++除法实现方式及负数取模详解
一、下面的题目你能全做对吗? 1.7/4=? 2.7/(-4)=? 3.7%4=? 4.7%(-4)=? 5.(-7)/4=? 6.(-7)%4=? 7.(-7)/(unsigned)4=? 答案: 1 -1 3 3 -1 -3 1073741822 如过你全部答对,你可以无视后面的内容…… 二、除法的取整分类 除法的取整分为三类:向上取整、向下取整、向转载 2016-05-30 11:00:21 · 8425 阅读 · 3 评论 -
const的用法详解
const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。 在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 this所指向的对象,也不能改变 this所保存的地址。 关键字:Const,Const函数,Const变转载 2016-02-29 11:24:19 · 670 阅读 · 0 评论 -
cdecl、stdcall、fastcall函数调用约定区别
在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么转载 2014-06-09 19:56:40 · 1276 阅读 · 0 评论 -
关于strlen
C语言实现strlen函数的几种方法 #include #include #include int myStrlen(const char *str); int myStrlen1(const char *str); int myStrlen2(const char *str); int main() { char *str=NULL; str = "Hello原创 2014-06-04 10:30:12 · 719 阅读 · 0 评论 -
strcpy()、memcpy()、memmove()、memset()及其应用
一、strcpy()实现, 字符串拷贝. char *strcpy(char *strDest, const char *strSrc) { assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != '\转载 2014-06-04 10:28:19 · 688 阅读 · 0 评论 -
运算符优先级
快速索引: Java C++ C语言 PHPPython Java 运算符优先级 运算符 优先级 postfix expr++ expr-- unary ++expr --expr +expr -expr ~ ! multiplicative * / % additive + - shift >转载 2014-03-31 22:12:03 · 864 阅读 · 0 评论 -
C++中const详解
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示: No. 作用 说明 参考代码转载 2014-03-03 21:26:28 · 574 阅读 · 0 评论 -
C++多态技术---静态多态和动态多态
多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”。和纯粹的面向对象程序设计语言不同,C++中的多态有着更广泛的含义。除了常见的通过类继承和虚函数机制生效于运行期的动态多态(dynamic polymorphism)外,模板也允许将不同的特殊行为和单个泛化转载 2014-03-01 13:47:35 · 936 阅读 · 1 评论 -
【C++模版之旅】静态多态(模版模拟多态)的讨论
说到面向对象特性之一“多态”,以我的水平已经说不出太多新意了。相信很多程序员代码K多了,做梦都在“多态中”运行着。常规的多态是C++语义内置支持的一种特性,通过虚函数可以实现这个特性,为了后面以示区别,我们姑且把这种多态称为“动态多态”或”运行期多态“,而本文总主要想讨论下“静态多态”,也可以叫“编译期多态”,同时一起来看下,静态多态会给我们带来哪些惊喜之处,拭目以待吧。 首先看个正常转载 2014-03-01 13:49:50 · 777 阅读 · 0 评论 -
23大设计模式简单介绍
设计模式主要分三个类型:创建型、结构型和行为型。 创建型模式(Creational Pattern) 1、 抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 2、 建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 3原创 2014-03-02 10:13:36 · 677 阅读 · 0 评论 -
C++虚函数与虚函数表
多态性可分为两类:静态多态和动态多态。函数重载和运算符重载实现的多态属于静态多态,动态多态性是通过虚函数实现的。 每个含有虚函数的类有一张虚函数表(vtbl),表中每一项是一个虚函数的地址, 也就是说,虚函数表的每一项是一个虚函数的指针。 没有虚函数的C++类,是不会有虚函数表的。 两张图: 简单例子: 1 #include 2 #include转载 2014-03-01 14:02:10 · 703 阅读 · 0 评论 -
虚继承与普通继承之间的关系
首先,重复一下虚拟继承与普通继承的区别有: 假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误; 假设derived 虚继承自base类,那么derivd与base是一种“has a”的关系,即derived类有一个指向base类的vptr。 因此虚继承可以认为不是一种继承关系,而可以认为是一种组转载 2014-02-28 22:10:49 · 1000 阅读 · 0 评论 -
C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
一、本文目的与说明 1. 本文目的:理清在各种继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容。 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的特殊性,所以在总结它的性质时将它单独列出来了。 3. 单继承、多继承、虚继承,既然都属于继承,那么虽然有一定的区别,但还是相同点比较多。如果放在一块讲,但为了将内容制作成转载 2014-02-28 21:45:43 · 648 阅读 · 0 评论 -
C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使转载 2014-02-28 22:20:11 · 682 阅读 · 0 评论 -
C语言字节对齐
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数转载 2014-02-28 22:14:52 · 638 阅读 · 0 评论 -
C中的printf函数详解
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。 printf()函数的调用格式为: printf("", ); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。 参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的转载 2014-03-23 14:52:20 · 1008 阅读 · 0 评论 -
C语言 内存分配 地址 指针 数组 参数 实例解析 (C语言复习)
指针简介 : 指针式保存变量地址的变量; -- 增加阅读难度 : 指针 和 goto 语句会增加程序的理解难度, 容易出现错误; -- ANSI C : American National Standards Institute 美国国家标准学会, 即标准C; -- 通用指针类型 : ANSI C中使用 void* 作为通用指针类型, 即指向void的指针, void 是空类型, void转载 2014-03-23 15:15:19 · 944 阅读 · 0 评论 -
C++大型项目开发约束
第一章 简介 大型软件项目通常由相应的大型开发团队承担。大型团队生成的代码要有项目范围内可评测的质量,代码必须遵从于某一标准并以此来评价。因此,对大型的项目团队来说,建立一个编程的标准或一组指南很重要。 使用编程标准也使以下各项成为可能: 增加开发过程代码的强壮性、可读性、易维护性;减少有经验和无经验开发人员编程所需的脑力工作; 在项目范围内统一代码风格; 通过人为以及自动的方式对最转载 2014-04-19 10:11:04 · 1000 阅读 · 0 评论
分享