C/C++
文章平均质量分 91
风中舵手
个性、快乐、勇气
展开
-
Linux线程-互斥锁pthread_mutex_t
在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务;互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。一,锁的创建 锁可以被动态或静态创建,可以用转载 2016-07-29 16:15:31 · 228 阅读 · 0 评论 -
(++a)+=(a++)怎么计算啊?
(++a)+=(a++)怎么计算啊? 分享| 2009-07-09 00:08zzz2003526 | 浏览 1352 次int a=4;cout<<(++a)+=(a++)<<endl; //结果为10cout<<a<<endl; //结果为11帮忙分析下啊,谢谢了。2009-07-09 00:31提问者采纳转载 2016-05-20 19:29:41 · 2607 阅读 · 0 评论 -
C++引用作为函数参数
C++引用作为函数参数下一节>分享到:QQ空间新浪微博腾讯微博豆瓣人人网C语言辅导班,帮助有志青年!按月付费,减轻负担,仅需200元,穷人也能学!【iOS辅导班】一对一交流,快速学习,仅需三个月,玩转APP开发,找到靠谱的工作!有了变量名,为什么还需要一个别名呢?C++之所以增加引用类型转载 2016-05-20 16:07:32 · 399 阅读 · 0 评论 -
类的内联函数的实现应该放在哪里
作者:朱金灿来源:http://blog.csdn.net/clever101/ 今天公司研发部举行会议,讨论执行代码审查事宜。在讨论到一条:头文件不能放函数实现代码,我提出异议:内联函数应该例外。同事反驳说:内联函数的实现也可放进cpp文件。我摆出我的理由:如果是类的内部使用该类的内联函数,函数实现放哪都行(头文件和cpp文件都可以);但是如果外部调用类的内联函转载 2016-06-02 10:09:24 · 671 阅读 · 0 评论 -
C++类型安全
C++类型安全http://blog.csdn.net/btwsmile/article/details/6693178什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错转载 2016-05-19 20:57:27 · 284 阅读 · 0 评论 -
你有被stringstream坑过吗?
stringstream常用来安全的格式化若干个字符串,数值到一个缓冲区, 而不用担心溢出, 可以用来取代snprintf. 但是很多人都在使用stringstream的时候遇到因为stringstream内部的缓冲区没有正确的清空导致的问题.那么把stringstream类内部的缓冲区正确的清空方式是什么呢?stringstream ss;答案是: ss.str("") 方法转载 2016-05-31 19:15:32 · 887 阅读 · 0 评论 -
函数重载机制的奥秘
C++是怎么区分同名的函数呢?原来是编译器悄悄使用了一个称作名字分裂规则的机制。现代民俗给女孩子起名喜欢‘娜’、‘薇’等字,一个班出现两个‘李娜’,不是什么新鲜事,然而老师居然也能应付。老师是怎么做的呢?老师把她们的名字进行了扩展,把能区分她们一些特性加到姓名里来了,于是乎,出现了‘大李娜’、‘小李娜’、‘胖李娜’、‘瘦李娜’。假如她们高矮、胖瘦都一样,老师也有办法,把她们的家长找来开会:“有转载 2016-05-31 09:45:49 · 303 阅读 · 0 评论 -
断言(ASSERT)的用法
断言(ASSERT)的用法 我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”。 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句:if(假设成立){ 程序正常运行;}e转载 2016-05-17 11:49:23 · 318 阅读 · 0 评论 -
函数调用--函数栈
函数调用--函数栈函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果,还有大家比较熟悉的一句话,就是函数调用是在栈上发生的,那么在计算机内部到底是如何实现的呢? 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写数据段转载 2016-05-30 14:56:05 · 217 阅读 · 0 评论 -
#ifndef/#define/#endif使用详解
想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 其实“被重复引用”是指一个头文件在同一个cp转载 2016-05-15 23:00:38 · 326 阅读 · 0 评论 -
大端与小端存储模式详解
端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian(这句话最为形象)。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big E转载 2016-05-04 15:53:05 · 297 阅读 · 0 评论 -
C++虚继承的概念
http://blog.csdn.net/wangxingbao4227/article/details/6772579C++中虚拟继承的概念为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存转载 2016-06-03 15:36:58 · 308 阅读 · 0 评论 -
C++成员函数的存储方式
用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如图8.4所示。图8.4 能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如图8.5所示。图8.5转载 2016-06-11 11:26:26 · 235 阅读 · 0 评论 -
C++静态成员函数小结
类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时转载 2016-06-12 11:52:12 · 192 阅读 · 0 评论 -
四种强制类型转换的总结(const_cast、static_cast、dynamic_cast、reinterpreter_cast)
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 d转载 2016-06-16 11:37:37 · 289 阅读 · 0 评论 -
虚函数与虚继承寻踪
封装、继承、多态是面向对象语言的三大特性,熟悉C++的人对此应该不会有太多异议。C语言提供的struct,顶多算得上对数据的简单封装,而C++的引入把struct“升级”为class,使得面向对象的概念更加强大。继承机制解决了对象复用的问题,然而多重继承又会产生成员冲突的问题,虚继承在我看来更像是一种“不得已”的解决方案。多态让对象具有了运行时特性,并且它是软件设计复用的本质,虚函数的出现为多态性转载 2016-07-01 14:59:47 · 258 阅读 · 0 评论 -
C++的构造函数和析构函数
1、构造函数和析构函数为什么没有返回值?构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许。在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己转载 2016-07-01 11:07:40 · 252 阅读 · 0 评论 -
构造函数析构函数为什么没有返回值?
构造函数析构函数为什么没有返回值? (Liupq 2008.5.10)构造函数和析构函数是两个非常特殊的函数:它们没有返回值.这与返回值为void的函数显然不同.后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许.在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行.如果它们有返回值,要么编译器转载 2016-07-01 11:07:03 · 653 阅读 · 0 评论 -
纯虚函数能为private吗?
我们把一个仅仅含有纯虚函数的类称为接口,我们也好像已经习惯了将这个接口中的所有纯虚函数全声明为public,而且按照这样的设计,一切都工作得不错。比如COM正是这样做的,它的接口中几乎不会存在private的纯虚函数。那么,让我们想一想,纯虚函数或者虚函数可以为private吗?如果这种方式是可行的,那么什么时候可以将(纯)虚函数设为private了?这些都是本文将要讨论的主题。一起来看看。转载 2016-06-15 10:20:26 · 424 阅读 · 0 评论 -
C++虚基类构造函数
C++虚基类构造函数下面文章详细介绍C++虚基,所谓C++虚基类:是由最派生类的构造函数通过调用虚基类的构造函数进行初始化的,但前提是要深入理解到底什么是C++虚基类,及他是怎么运行的。前面讲过,为了初始化基类的子对象,派生类的构造函数要调用基类的构造函数。对于虚基类来讲,由于派生类的对象中只有一个虚基类子对象。为保证虚基类子对象只被初始化一次,这个虚基类构造函数必须只被调用一次。转载 2016-06-14 16:12:06 · 971 阅读 · 0 评论 -
多重继承下的虚函数调用~
在多重继承的情况下,需要通过修改this指针达到调用真正函数的目的,这个技术也被称为“thunk”。例子如下:(例子源于zlj博客)class A...{public: int a, b; virtual void show();};class B...{public: int a, b; virtual void转载 2016-06-14 11:12:19 · 433 阅读 · 0 评论 -
关于32位系统中int、float、short、double等占多少个字节
我用VC编译的,测试了一下,代码如下:#include "iostream"using namespace std;int main(){coutcoutcoutcoutcoutcoutreturn 0;}结果为:124448由此看出,32位系统,vc编译转载 2016-06-13 17:27:13 · 2737 阅读 · 0 评论 -
内存和内存地址通俗理解
内存 : 程序和数据平常存储在硬盘(硬盘是一种可记忆盘)等存储器上,不管你开机或关机了,它们都是存在的,不会丢失。硬盘可以存储的东西很多,但其传输数据的速度较慢。所以需要运行程序或打开数据时,这些数据必须从硬盘等存储器上先传到另一种容量小但速度快得多的存储器(无记忆盘),之后才送入CPU进行执行处理。这中间的存储器就是内存。 每个数据,都需要在内存上转载 2016-06-13 16:54:41 · 2777 阅读 · 0 评论 -
c++,父类引用指向子类对象,虚函数
c++有父类引用指向子类对象(面向对象的重要特点之一,java里是这样的!)#includeclass Father{public: Father() { f = 1; } void print() { cout<<"f = "<<f<<endl; }public: int f;};#include#include "Father.c转载 2016-06-12 17:29:58 · 1060 阅读 · 0 评论 -
联合体(union)的使用方法及其本质
有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struc转载 2016-05-04 15:51:59 · 434 阅读 · 0 评论 -
C++中new和malloc的区别
1、new 是c++中的操作符,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。4.new可以转载 2016-05-27 11:28:54 · 241 阅读 · 0 评论 -
new/delete 和malloc/free 的区别一般汇总
一、基本概念 malloc/free:1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系转载 2016-05-27 11:28:10 · 195 阅读 · 0 评论 -
关于C++类的静态数据为什么一定要初始化
我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。可以通过以下几个例子更形象的说明这个转载 2016-05-25 10:39:05 · 460 阅读 · 0 评论 -
static成员必须在类外初始化
为什么static成员必须在类外初始化为什么静态成员不能在类内初始化在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样class A{ private: static int count ; // 类内声明};int A::count = 0 ; // 类外初始化,不必再加static关键字为什么?因为静转载 2016-05-25 10:37:35 · 203 阅读 · 0 评论 -
关于C++中的虚拟继承的一些总结
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public virtual A;class B2:p转载 2016-04-17 22:15:40 · 190 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2016-04-17 21:54:35 · 176 阅读 · 0 评论 -
什么是C++虚函数、虚函数的作用和使用方法
我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例如在例12.1(具体代码请查看:C++多态性的一个典型例子)程序中,在Circle类中定义了 area函数,在Circle类的派生类Cylinder中也定义了一个area函数。这两个函数不仅名字相同,而转载 2016-04-17 21:25:56 · 221 阅读 · 0 评论 -
c++工程里一个文件怎么调用另外一个文件里的函数
(1)前提为,另一个文件中的函数,不能是静态函数,即不能有static修饰。调用方法,在调用前进行声明,然后直接调用即可。声明方法:1 直接在调用前,写函数声明:如调用函数为int func(int a),那么在调用前只需要int func(int a);这样声明后,即可使用func。2 将声明写在头文件中。如在名为func.h的头文件中加入int fu转载 2016-05-24 14:47:42 · 30054 阅读 · 6 评论 -
C语言变量作用域
C语言中变量的作用域C语言中所有变量都有自己的作用域,申明变量的类型不同,其作用域也不同。C语言中的变量,按照作用域的范围可分为两种, 即局部变量和全局变量。 一、局部变量局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。例如:int f1(int a) /*函数f1*/ { in转载 2016-05-24 11:40:47 · 357 阅读 · 0 评论 -
【算法总结--数组相关】双指针法的常见应用。
所谓双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行扫描,从而达到相应的目的。 换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。 (注:这里的指针,并非专指c中指针的概念,而是指索引,游标或指针,可迭代对象等) 这类算法包括: 1.给定一个有序递增数转载 2016-04-08 19:34:34 · 210 阅读 · 0 评论 -
C++类所占内存大小计算
http://blog.csdn.net/wangxingbao4227/article/details/6772579C++中虚拟继承的概念为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存转载 2016-04-08 10:14:17 · 292 阅读 · 0 评论 -
C语言中,数组名作为参数传递给函数时,退化为指针
C语言中,数组名作为参数传递给函数时,退化为指针;需要数组大小时,需要一个参数传数组名,另一个传数组大小。数组名做函数参数时,就相当于指针了。sizeof对指针操作结果应该是4。 一般函数参数为数组时,可以有两个参数,一个数组名,一个数组长度的。首先C语言里面不支持数组作为形参来进行调用,例如函数void fun(int a[]);里面的a实际上在进行编译转载 2016-04-08 09:55:17 · 807 阅读 · 0 评论 -
C++ 析构函数 为何一般定义为虚函数
C++ 析构函数 为何一般定义为虚函数,例子:[cpp] view plain copy"font-size:14px;">#include using namespace std; class Animal { public: Animal() { cout转载 2016-05-25 11:53:32 · 352 阅读 · 0 评论 -
虚函数表
虚函数C++中的虚函数的实现一般是通过虚函数表(C++规范并没有规定具体用哪种方法,但大部分的编译器厂商都选择此方法)。类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。注意的是,编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一行。如果类中有N个虚函数,那么其虚函数表将有N*4字节的大小。转载 2016-04-17 22:54:12 · 184 阅读 · 0 评论 -
c++ 继承与权限
基类中 继承方式 子类中 public & public继承 => public public & protected继承 => protected public & private继承 => private protected & pu转载 2016-04-17 23:10:26 · 312 阅读 · 0 评论