![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++语言
shengxiaweizhi
这个作者很懒,什么都没留下…
展开
-
理解c语言的sizeof
c语言有很多用起来需要特别注意的地方,我们以后会分析其中有使用价值的点。今天我们一起看看sizeof。c语言通过类型长度来达到指针的灵活性,我们觉得,某种意义上讲,是sizeof功能成就了c指针。基础知识首先,要知道sizeof是关键字不是函数。也就是说,用到sizeof的地方其实在编译阶段就已经计算出结果了,不是(也不能)在程序运行时动态地计算。换句话说,代码中同一个sizeof转载 2015-05-24 15:06:18 · 614 阅读 · 0 评论 -
基于C++ Lambda表达式的程序优化
这是一个关于C\C++程序员的一个小故事,关于C++11――刚刚通过的新标准的一个小故事…请不要误会,题目中所提及的“优化”并不是提升程序的性能――Lambda表达式干不了这个。从本质上来说,它只是一种“语法糖”而已。不使用这种表达式,我们照样可以写出满足需求的程序。正如放弃C而使用汇编,或者放弃汇编而使用机器语言一样,你能控制的范围就在那里,不增不减。但如果有得选择,我相信大部分人会选择汇编转载 2015-05-24 15:34:09 · 282 阅读 · 0 评论 -
malloc 和alloc及calloc的区别
C语言跟内存分配方式 (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序转载 2015-05-24 16:58:43 · 299 阅读 · 0 评论 -
内存分配秘籍:new,malloc,globalAlloc的区别与详解
在C和C++语言的学习和使用中,尤其是科学计算编程中,内存的合理分配常常是一个很头疼的问题。你无法在你的程序中使用,例如double a[2000][3000]这样的超大静态数组变量,因为这已经超出普通编译器默认的栈大小更或者会受到系统等因素的影响而无法使用,必须使用动态分配内存的技术,这样就可以不受限制了。(前提是系统内存足够) 一、关于内存 1、内存分配方式 内存有三种:转载 2015-05-24 17:01:24 · 487 阅读 · 0 评论 -
C/C++字符串查找函数
C/C++ string库(string.h)提供了几个字符串查找函数,如下:memchr在指定内存里定位给定字符strchr在指定字符串里定位给定字符strcspn返回在字符串str1里找到字符串str2里的任意一个字符之前已查找的字符数量strrchr在字符串里定位给定字符最后一次出现的位置strpbrk在转载 2015-05-24 20:41:24 · 665 阅读 · 0 评论 -
C++的函数重载
函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题1、声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了)2、当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调用的是哪个函数转载 2015-07-16 23:28:00 · 394 阅读 · 0 评论 -
构造函数沉思录
缘起 构造函数,是由C++引入主流程序世界的,其用意是在《C++语言的设计与演化》如是表达: 它建立起其它成员函数进行操作的环境基础。 在很早的一篇blog《对象的声明》中,我曾探讨过构造函数的来龙去脉。对于面向对语言而言,构造函数似乎是标配。 一个语言特性,一旦被扔到真实世界,随之而来的是,其使用往往会超出其设计者的初衷,构造函数亦是如此。转载 2015-07-21 20:27:48 · 362 阅读 · 0 评论 -
C++Event机制的简单实现
一 事件模型 对发生的事件作出的响应——事件模型。1 事件: 在面向对象中,就是对象的属性或者状态发生了变化,操作或者接收到了某些动作时,向外发出了这种变化或者动作对应的通知。 2 事件模型包括的元素: 3 事件模型过程: 二 代码实现1 EventManager /*-------转载 2015-07-22 23:08:31 · 1068 阅读 · 0 评论 -
int main(int argc,char* argv[])详解
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[]) { int i; for (i = 0; i i++) cout转载 2015-06-07 22:27:35 · 338 阅读 · 0 评论 -
C++对象模型
何为C++对象模型? C++对象模型可以概括为以下2部分:1.语言中直接支持面向对象程序设计的部分2.对于各种支持的底层实现机制语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我简单过一下,重点在底层实现机制。在c语言中,“数据”和“处理数据的操作(函数)”是分开来转载 2015-05-19 22:08:43 · 423 阅读 · 0 评论 -
深入了解C语言
文章来自 http://blogread.cn/it/article/4553?f=wb 。 Dennis Ritchie 过世了,他发明了C语言,一个影响深远并彻底改变世界的计算机语言。一门经历40多年的到今天还长盛不训的语言,今天很多语言都受到C的影响,C++,Java,C#,Perl, PHP, Javascript, 等等。但是,你对C了解吗?这里,我再写一篇关于深入理解C语转载 2015-05-10 21:18:58 · 368 阅读 · 0 评论 -
C++的函数重载
写在前面:函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题1、声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了)2、当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调转载 2015-05-12 21:51:04 · 391 阅读 · 0 评论 -
C++静态库与动态库
这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。 什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是转载 2015-05-12 22:20:23 · 337 阅读 · 0 评论 -
减少C++代码编译时间的方法
c++的代码包含头文件和实现文件两部分,头文件一般是提供给别人(也叫客户)使用的,但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班的大部分时间,这样干了一天挺累的,但是你的老板说你没有产出,结果你被fired,是不是很怨啊,如果你早点看到这段文章,你就会比你的同事开发效转载 2015-05-12 22:27:38 · 332 阅读 · 0 评论 -
在C++里写一个不能被继承的类
这是最近看到的一道面试题,最近是看了不少道面试题,C++里各种变态的问法。这道题算是比较正常的吧。在C++语言里,是没有类似Java里final class的概念的,但是学C++的人心里一定要相信,C++是万能的。于是有人给出了一种解法。代码我在下面再贴一下吧,不过著作权归原作者所有,向原作者表示敬意。template class MakeFinal{ friend T;转载 2015-05-30 22:50:26 · 373 阅读 · 0 评论 -
萃取(traits)编程技术的介绍和应用
引子最近在写C++代码的时候, 经常能使用到萃取(traits)编程技术, 于是学习STL中关于萃取的知识, 并总结出来, 以飨读者, 同时加深自己的理解.迭代器中萃取技术STL简述STL(Standard Template Library)是C++泛型编程(template技术)的集大成者, 迭代器在STL中发挥重要的作用. 在STL中有3个重要的概念:容器, 包括顺转载 2015-05-30 22:56:13 · 1008 阅读 · 0 评论 -
一个“蝇量级” C 语言协程库
协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法“子例程是协程的特例”,一个子例程就是一次子函数调用,那么实际上协程就是类函数一样的程序组件,你可以在一个线程里面轻松创建数十万个协程,就像转载 2015-05-30 22:51:35 · 460 阅读 · 0 评论 -
C++能否成为你新的脚本语言?
一些背景 第一个我真正喜爱的编程语言是 C。我花了不少时间才找到它:当我还是一个孩子,我就开始在珍贵的ZX Spectrum上使用 Z80 汇编。那些日子是你能够真正掌握你的电脑的时候,你不需要苹果,谷歌,微软或者其他任何人的允许就能写一个程序。我在漂亮的128K ZX Spectrum +2上学习了在超出 CPU 寻址空间时对内存块分页。直到我进入大学,我才拥有一台 IBM PC转载 2015-06-03 22:47:53 · 681 阅读 · 0 评论 -
C++中事件机制的简洁实现及需要放弃的特性
事件模型是被广泛使用的好东西,但是C++标准库里没有现成的,现在VC11可以用在XP下了,那么就痛快的拿起C++11提供的先进设施组合出一个轻便的实现吧感兴趣的朋友可以了解下,或许对你有所帮助事件模型是被广泛使用的好东西,但是C++标准库里没有现成的,其他实现又复杂或者不优雅,比如需要使用宏。现在VC11可以用在XP下了,那么就痛快的拿起C++11提供的先进设施组合出一个轻便的实现吧。转载 2015-07-22 22:34:10 · 450 阅读 · 0 评论