c++笔记
文章平均质量分 65
搬砖小能手lp
这个作者很懒,什么都没留下…
展开
-
C++中的delete和delete[]区别
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自转载 2015-11-12 20:46:11 · 440 阅读 · 3 评论 -
详解拷贝构造函数
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2015-11-27 15:06:25 · 290 阅读 · 0 评论 -
一道考察函数参数传递、值传递、指针传递(地址传递)、引用传递
#includeusing namespace std;void swap1(int p, int q){int temp;temp =p;p =q;q = temp;}void swap2(int*p,int*q){int * temp;*temp = *p;*p =*q;*q =*temp;}void swap3(原创 2015-11-26 23:27:22 · 1081 阅读 · 0 评论 -
placement new 详解
placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; } 首先我们区分下几个容易混淆的关键词:new、转载 2015-11-27 23:05:00 · 635 阅读 · 0 评论 -
linux动态链接库编写和使用
我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心。这个文件叫做 “库(Libary)”,平时我们把编译好的目标代码存储到“库”里面,要用的时候链接程序帮我们从库里面找出来。静态链接库: 在早期库的组织形式相对简单,里面的目标代码只能够进行静态链接,所以转载 2015-12-14 23:31:20 · 311 阅读 · 0 评论 -
new和malloc的区别
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.2 voi转载 2015-11-27 23:22:04 · 221 阅读 · 0 评论 -
文件读写的一些函数--fseek()---fread()----ftell()
函数ftell用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。该函数对于2的31次方-1的文件,即:2.1G以上的文件操作时可能出错。头文件:stdio.h;功能:返回当前文件位置 使用fseek函数后在调用函数ftell()就能非常容易地确定当前文件的位置函数原创 2015-11-29 08:51:46 · 708 阅读 · 0 评论 -
C++中placement new详解
placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator new( size_t, void *p ) throw() { return p; } 首先我们区分转载 2015-12-03 11:50:23 · 487 阅读 · 0 评论 -
c的经典算法
老掉牙 河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个皇后 八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题(Knapsack Problem) Ø数、运算 蒙地卡罗法求 PI Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍转载 2015-12-21 00:17:08 · 2089 阅读 · 0 评论 -
静态链接库和动态链接库的区别
静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生转载 2015-12-06 20:34:12 · 231 阅读 · 0 评论 -
C++显示类型转换
C++显示类型转换 在C语言中,强制类型转换非常简单。double pi=3.14;int piInt=(int)pi;这个强制类型转换会丢失部分数据(.14),所以如果不加(int)做强制转换,严检查的编译会报错,宽检查的编译会报warning。在C语言中,指针是4字节或者8字节的,所以指针之间的强制转换在转换的时候就如同不同的int之转载 2015-12-06 11:22:32 · 546 阅读 · 0 评论 -
extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2015-12-07 19:45:52 · 279 阅读 · 0 评论 -
int main (int argc,char *argv[])和int mian()
main函数的参数 windows下编程这两个看不出什么区别,在linux下用int main(int argc,char*argv[])进行编程会体会到。前面介绍的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此原创 2015-12-07 20:18:28 · 1389 阅读 · 0 评论 -
do{}while(0);详解
do...while(0)的妙用在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...w原创 2015-12-26 00:05:43 · 769 阅读 · 0 评论 -
void 和void*的详解
void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型; 2. 如果函数无参数,那么应声明其参数为void; 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void * ; 4. void不能代表一个真实的变量;转载 2015-12-26 00:11:22 · 437 阅读 · 0 评论 -
使用VS2008创建和调用动态链接库
使用VS2008创建和调用动态链接库1. 动态链接库的概念及优点 动态链接库是一个函数和变量的集合,在调用它的程序运行时才被加载。因此,动态链接库和可执行程序是分离的。 动态链接库具有以下优点: (1) 隐藏源代码; (2)实现代码重用; (3)当程序调用DLL中的函数时不需要重新转载 2015-12-14 23:28:23 · 3307 阅读 · 0 评论 -
NULL指针、零指针、野指针---详解
1. 空指针、NULL指针、零指针1.1什么是空指针常量0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相转载 2015-11-27 23:29:55 · 777 阅读 · 0 评论 -
Strchr()函数详解
strchr函数原型:extern char *strchr(const char *s,char c);查找字符串s中首次出现字符c的位置。简要介绍原型:extern char *strchr(const char *s,char c);const char *strchr(const char* _Str,int _Val)char *strchr(转载 2015-11-13 22:28:58 · 3443 阅读 · 0 评论 -
关于ini文件读写的一些问题
[section1] key1=XXXX key2=YYYY [section2]key1=XXX#adada#ooookey2=yyy 这是两个配置段,第一个配置段名为section,里面有两个配置项目即:key1,key2,值分别为xxx和yyyy要求能够读取这样的文件,并提供提取所有section名字列表的接口,提取访问某个section下所有key的列表,提取访问原创 2015-11-13 22:42:58 · 377 阅读 · 0 评论 -
memcpy
memcpy 编辑词条B 添加义项 ?c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。基本信息中文名称函数外文名称memcpy原型void * m转载 2015-11-13 23:03:46 · 946 阅读 · 0 评论 -
string 与char* char[]之间的转换
和char* 不同的是,string不一定以NULL(‘\0’)结束,string长度可以根据length()得到,string可以根据下标进行访问。所以,不能将string直接复制给char*一、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。标准string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进原创 2015-11-15 20:28:02 · 512 阅读 · 1 评论 -
关于const的详解
面试题1:下面那个const应该被移除?代码如下:const bufsize = 100;#include#include#include BUF_SIZE 30using namespace std;class A{ public:A();~A(){};public:intlie const[A] BYTE * GetBuffer() cons原创 2015-11-21 23:26:22 · 2736 阅读 · 0 评论 -
C++中的lambda表达式详解
这篇文章主要介绍了C++中的Lambda表达式详解,本文讲解了基本语法、Lambda的使用等内容,需要的朋友可以参考下我是搞C++的一直都在提醒自己,我是搞C++的;但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C++代码了。今天看到了C++中的Lambda表达式,虽然用过C#的,但是C++的,一直没有用,也不知道转载 2015-11-21 21:21:42 · 335 阅读 · 0 评论 -
shared_ptr
shared_ptr是一个最像指针的"智能指针",是boost.smart_ptr库中最有价值、最重要的组成部分,也是最有用的,Boost库的许多组件--甚至还包括其他一些领域的智能指针都使用了shared_ptr。抱歉,我实在想不出什么更恰当的词汇来形容它在软件开发中的重要性。再强调一遍,shared_ptr非常有价值、非常重要、非常有用。 shared_ptr与scoped_p转载 2015-11-23 22:54:51 · 295 阅读 · 0 评论 -
关于sring中的reserve()问题
string是一种变长的字符串存储结构,使用时会预创建一定大小的空间.当空间不足时,系统自动为string对象扩容,会有固定扩容步长(很多机器人是16),比如一般机器string默认是 string.size() == 15 ; 当string = "一个超过15长度的字符串",则自动扩充到31(n*16 -1),或者更大的-31-47-63等等.也就是说string的存储空间是不断变化的.而且默原创 2015-11-23 17:12:58 · 971 阅读 · 0 评论 -
shared_ptr智能指针源码剖析
前几天有个人问了我一个问题: 如何将一个智能指针作为函数的返回值传递出来。当时这个问题一下子把我问倒了,后来经人提醒有一个叫shared_ptr的智能指针可以解决这个问题。将shared_ptr作为函数返回值的代码是这样的:?123456789101112转载 2015-11-23 22:56:35 · 559 阅读 · 0 评论 -
栈和堆的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的转载 2015-11-23 23:08:27 · 243 阅读 · 0 评论 -
关于delet和析构函数
例有一个类AA{public;~A(){}int *p;};A *a = new A();delete a;解析:1.delete是用来释放用new分配的空间,他会调用类的析构,delete完毕后,指针为悬垂指针,访问它可能引起意想不到的结果,也可能正确访问,所以建议delete后,把指针置为NULL,这样后面可以根据NULL来判转载 2015-11-23 23:15:19 · 2285 阅读 · 0 评论 -
默认构造函数和默认复制构造函数
各种构造函数的区别 构造函数(包括拷贝构造函数)的基本功能:分配空间,初始化数据.一.默认构造函数. 与用户自定义构造函数相比,默认构造函数有功能缺陷:只能分配空间,完成不了初始化数据的任务(类的数据成员都是基本类型数据类型时的默认拷贝构造函数是个例外).1.一般的默认构造函数 若用户没有定义任何构造函数(包括拷贝构造函数),则编译器转载 2015-11-24 22:31:55 · 1531 阅读 · 0 评论 -
深拷贝和浅拷贝的理解
对深拷贝与浅拷贝的再次理解 记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再次遇到深拷贝与浅拷贝,认真分析了,写写自己的心得吧。 先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1转载 2015-11-24 22:31:02 · 329 阅读 · 0 评论 -
一个空类占多少空间?多重继承的空类呢
解析:我们用程序来实现一个空类和一个多重继承的空类。看看它们的输出结果:#include#include#includeusing namespace std;class A{};class A2{};class B:public A{};class C:public virtual B{};cla原创 2015-11-24 23:18:51 · 1185 阅读 · 0 评论 -
ssize_t和size_t详解
对于赶时间的朋友,只看第一段就好了。 首先,我非常肯定以及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与long int,有没有注意到,它和long数据类型有啥区别?其实就是一样的。size_t 就是无符号型的ssize_t,也就是unsigned long/ unsigned int (在32位下),不同的编译器或系统可能会有区别,主要是因为在3转载 2015-12-26 00:12:42 · 41890 阅读 · 6 评论