C++
文章平均质量分 80
勇敢无畏的活着
这个作者很懒,什么都没留下…
展开
-
头文件 string.h cstring string 区别
1.#include //不可以定义string s;可以用到strcpy等函数using namespace std;#include //可以定义string s;可以用到strcpy等函数using namesapce std;#include //不可以定义string s;可以用到strcpy等函数转载 2014-09-18 11:46:27 · 376 阅读 · 0 评论 -
C/C++中const关键字
首先,一看到const关键字,我们的第一反应就是定义常量。的确,这没有错,const就是constant的缩写嘛,但是事实上他的用法远不止这些。接下来我们一一来讲解。 在C程序中,const的用法主要有定义常量、修饰函数参数和修饰函数返回值。而在C++程序中,它除了上述功能外,还可以修饰函数的定义体,定义类中某个成员函数为恒态函数,即不改变类中的数据成员。对于定义常量的用法,这里就不转载 2015-05-23 20:40:59 · 380 阅读 · 0 评论 -
C++ explicit关键字详解
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的转载 2015-05-23 15:54:20 · 546 阅读 · 0 评论 -
C++类中成员变量的初始化总结
1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。 class CA{public:int data;……public:CA();…… }; CA::CA():data(0)//……#1……初始化列表方式{//da转载 2015-05-25 14:31:44 · 456 阅读 · 0 评论 -
堆、栈的区别
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(stati原创 2015-07-08 16:46:13 · 418 阅读 · 0 评论 -
C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a.引用b.常量c.静态d.静态常量(整型)e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化。 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末。参考下面的代码以及其中注释:#in转载 2015-05-25 12:16:43 · 536 阅读 · 0 评论 -
std::sort函数中的陷阱
前几天收到游戏中一个很严重的bug,执行某项操作的时候会出现卡死的现象。最后调试的时候定位到std的sort函数,发现一进这个函数就出不来了,很可能在里面出现了死循环。刚开始,我还是很诧异。大名鼎鼎,久经考验的的STL算法也会出现死循环?于是baidu了一下,果然在网上也发现不少人碰到过类似情况。出现死循环大多是由于在sort函数中的比较函数里面相等元素返回了true。 std的sort函转载 2015-06-11 08:32:01 · 2955 阅读 · 0 评论 -
线程安全和线程不安全理解
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据===========================================================转载 2015-05-25 20:41:35 · 401 阅读 · 0 评论 -
C++类中的静态成员变量和静态成员函数的作用
数据成员可以分静态变量、非静态变量两种.静态成员:静态类中的成员加入 static 修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.非成静态员:所有没有加 Static 的成员都是非静态成员,当类被实例转载 2015-05-25 12:17:28 · 660 阅读 · 0 评论 -
C++中const、volatile、mutable的用法
const、volatile、mutable的用法const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。例如:co转载 2015-07-03 16:39:35 · 453 阅读 · 0 评论 -
类型安全 与 线程安全 、异常安全、事务安全
(1)类型安全类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿的原创 2015-07-17 11:27:57 · 3327 阅读 · 0 评论 -
malloc、calloc、realloc、new以及alloca函数区别
malloc、calloc、realloc、new以及alloca函数一、综合叙述1) malloc 函数: void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行初始化。2)calloc 函数: void *calloc原创 2015-08-12 15:33:21 · 1168 阅读 · 0 评论 -
是否有初始化列表、参数是否为引用时调用构造函数和析构函数的执行顺序
下面以例子说明参数为类对象,是否有初始化列表时构造与析构函数的执行顺序:#include using namespace std; classA {public: A(){ cout"A"<<endl; } A(constA& other){ cout"copy A"<<endl;} ~A() { cout"~原创 2015-06-02 17:11:09 · 525 阅读 · 0 评论 -
C++中虚函数工作原理和(虚)继承类的内存占用大小计算
一、虚继承情况下类的内存大小计算当每个基类中有多个虚函数时,并且在虚继承的情况下,内存是如何分配的,如何计算类的大小,下面举例说明:#includeusing namespace std;class A{ public: int a; virtual void aa(){};};class D{public:原创 2015-06-01 09:50:07 · 829 阅读 · 0 评论 -
头文件string与string.h的区别
在C++中,#include与#include的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器)。喔,原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath就是由math.h变来的。using na转载 2015-04-24 10:36:04 · 452 阅读 · 0 评论 -
VS2010 C++环境下DLL和LIB文件目录及名称修改
DLL工程,Debug版本下输出文件由basetool.dll basetool.lib 改为basetoolD.dll basetoold.lib 需设置:1、配置属性-常规-目标文件名 $(ProjectName) 加d2、配置属性-连接器-常规-输出问件 由 加d3、配置属性-连接器-高级-导入库,设置文件名$(OutDir)$ProjectName)d.lib转载 2014-11-05 22:37:22 · 542 阅读 · 0 评论 -
struct型数据的内存布局,struct的对齐方式
当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。 首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首转载 2014-12-02 21:24:28 · 722 阅读 · 0 评论 -
内联函数和宏定义的区别
用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #d转载 2014-12-02 21:23:05 · 407 阅读 · 0 评论 -
printf函数对参数的计算顺序,是从右往左的
#includevoid main(){int i=2;printf("%d,%d,%d,%d,\n",i++,++i,i,i++);printf("%d\n",i);}首先,应该说明的是在不同的编译环境中结果是不一样的。关于本段代码在VC++6.0中的规则如下:1、printf函数的执行顺序是由右到左的2、前自增运算符(++i)先加1,再使用i,此时i转载 2014-12-02 21:25:19 · 1311 阅读 · 0 评论 -
C#中构建多线程应用程序
引言 随着双核、四核等多核处理器的推广,多核处理器或超线程单核处理器的计算机已很常见,基于多核处理的编程技术也开始受到程序员们普遍关注。这其中一个重要的方面就是构建多线程应用程序(因为不使用多线程的话,开发人员就不能充分发挥多核计算机的强大性能)。 本文针对的是构建基于单核计算机的多线程应用程序,目的在于介绍多线程相关的基本概念、内涵,以及如何通过System.Threadin原创 2015-02-04 10:24:52 · 1201 阅读 · 0 评论 -
牛人博客收集
【Android】(1)Android UI(2)Android(3)从零学Android(4)Android透明菜单制作(5)Android 高仿【优酷】圆盘旋转菜单的实现(附代码)(6)Android JQuery(7)Android游戏开发专栏(8)Android小知识 【Java】 (1)ja转载 2015-01-20 22:04:00 · 409 阅读 · 0 评论 -
a和&a有什么区别
请写出以下代码的打印结果,主要目的是考察a和&a的区别。#includevoid main( void ){int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1)); return;}输出结果:2,5。 *(a+1)其实转载 2015-01-20 21:22:47 · 1346 阅读 · 0 评论 -
结构体和类的区别
结构体和类的区别1.C的结构体和C++结构体的区别 1.1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 1.2 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 1.3 C语言的结构体是不可以继承的,C转载 2015-03-16 21:23:24 · 321 阅读 · 0 评论 -
C++ 虚函数表解析
C++虚函数表解析前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。转载 2015-03-18 09:12:04 · 347 阅读 · 0 评论 -
虚基类 、虚函数、 纯虚函数和抽象类
虚基类 在《多继承》中讲过的例子中,由类A,类B1和类B2以及类C组成了类继承的层次结构。在该结构中,类C的对象将包含两个类A的子对象。由于类A是派生类C两条继承路径上的一个公共基类,那么这个公共基类将在派生类的对象中产生多个基类子对象。如果要想使这个公共基类在派生类中只产生一个基类子对象,则必须将这个基类设定为虚基类。转载 2015-03-18 12:28:34 · 811 阅读 · 1 评论 -
类的初始化列表与构造函数的区别
类的成员数据可以再构造函数的初始化列表中赋值,也可以再构造函数的函数体里面赋值,那么这两种有什么样的区别呢? 1 一般情况下,这两种没有什么区别;2 当类成员是没有默认构造函数的对象时,必须使用初始化列表进行赋值;3 当类成员是const成员或引用成员时,也必须使用初始化列表进行赋值;4 使用初始化列表提高了效率,当在类的构造函数对对象进行赋值时,需要一个默认构造函数+一个拷贝转载 2015-03-18 14:56:25 · 575 阅读 · 0 评论 -
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。 堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。堆可以动转载 2015-08-13 15:57:17 · 529 阅读 · 0 评论