![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
oguro
无
展开
-
C++的深拷贝与浅拷贝
当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:(1)一个对象以值传递的方式传入函数体(2)一个对象以值传递的方式从函数返回(3)一个对象需要通过另外一个对象进行初始化。如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝,后面将进行说明。自定义拷贝构造函数...原创 2021-06-06 16:32:19 · 151 阅读 · 0 评论 -
delete 和 delete [] 的真正区别
int *a = new int[10];delete a; //方式1delete [] a; //方式2int *a = new int[10];delete a; //方式1delete [] a; //方式2c++中对new申请的内存的释放方式有delete和delete[]两种方式,到底这转载 2017-01-26 22:41:30 · 1085 阅读 · 0 评论 -
C 中 static 的常见作用
C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。原创 2017-01-26 22:26:17 · 302 阅读 · 0 评论 -
C++的string类IO输入
使用cin// strtype4.cpp -- line input#include #include // make string class available#include // C-style string libraryint main(){ using namespace std; char ch原创 2017-01-03 21:21:18 · 1653 阅读 · 1 评论 -
C++子类构造和析构被时,父类构造和析构的调用顺序
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。构造原则如下:原创 2016-12-03 14:56:39 · 2717 阅读 · 1 评论 -
g++编译警告原因分析..is used uninitialized in this function
主要是因为指针没有指向可用的内存地址或没有分配地址原创 2016-11-01 13:26:15 · 50538 阅读 · 0 评论 -
char数组赋值
定义一个数组char a[10];怎么给这个数组赋值呢?1、定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]={'h','e','l','l','o'};3、利用strcpychar a[10]; strcpy(a, "hell原创 2016-10-29 10:16:13 · 7332 阅读 · 0 评论 -
C++整数转字符串
两种结果都输出字符串233_itoa第三个参数代表进制#define _CRT_SECURE_NO_WARNINGS#include #include #include #include int main(void){ int a=233; char c[10] ; char d[10]; _itoa(a,c,10); sprintf(d, "%d", a);原创 2016-10-27 19:29:44 · 853 阅读 · 0 评论 -
GDB调试命令
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的原创 2016-11-07 16:43:01 · 314 阅读 · 0 评论 -
用C语言实现的简易内存池
这套内存池代码其实是我前不久刚刚进公司时,我的师傅安排给我的一个“作业”,可能目的是试探一下我的Coding能力,看看我的编码风格吧。现在把它写在这里和大家分享,这个代码并不是多么高效的内存池,只是作为一个简单的练习,开拓自己的思维,锻炼自己的链表编程能力。所以如果有人想找高效代码用在项目里,我建议还是使用开源的框架比较好。代码如果有BUG请指教,本人小白,大牛勿喷!内存池的使用背景:原创 2016-09-29 22:40:21 · 2702 阅读 · 0 评论 -
const修饰指针的用法:常量指针和指针常量
const通常用来修饰变量不能够更改值,多用来保护变量或参数。 const int b = 100; //b = 0;错误 当const修饰指针时,由于const的位置不同,它的修饰对象会有所不同。如下代码,int *const p2中const修饰p2的值,所以理解为p2的值不可以改变,即p2只能指向固定的一个变量地址,但可以通过*p2读写这个变量的值。原创 2016-09-28 21:49:56 · 9811 阅读 · 0 评论 -
g++编译报错原因分析 format ?.d?.expects argument of type ?.nt?. but argument 3 has type ?.
这是我工作时在linux环境下C++编译出现过的警告:warning: format ?.d?.expects argument of type ?.nt?. but argument 3 has type ?.int64 {aka long long unsigned int}?.[-Wformat=] (void)query.create_sql("SELECT * FRO原创 2016-09-28 20:59:42 · 6033 阅读 · 0 评论 -
java和C++中自增i++的区别
JAVA和C++对i++自增操作符的处理是不同的,JAVA是在内存中复制一份i值的拷贝再运算,而C++中是直接在原值上运算。int i = 0;i = i++;在java中i=i++的运算实质是先执行在内存中复制一份i的拷贝再i++,然后把拷贝的i值赋给接收者,所以i为原值0在C++中,则是先执行i=i 此时i为0 再执行i++ 此时i为1,故输出1++ (自增原创 2016-10-24 18:51:56 · 1580 阅读 · 0 评论 -
如何初始化char数组
1、直接逐个初始化字符数组:char str[10]={ 'I',' ','l','i','k','e',' ','c','a','t'};注意:如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则按初始化列表初始字符数组中前面那些元素,其余的元素自动定为空字符(即'\0' )。2、用字符串常量来初始化字符数组:在c语言中,将字符串作为字符数组来处理。因原创 2016-09-26 23:11:37 · 20027 阅读 · 0 评论 -
char数组转换成string
将C风格的字符串数组转换为C++风格的字符串假设c字符串定义为char ch[]="hello world!";1.向构造函数传入c字符串创建string对象:string str(ch);2.使用拷贝构造函数创建string对象:string str = ch;3.对已有的string对象调用string类内部定义的赋值运算符:string str;str =原创 2016-09-26 23:10:07 · 17635 阅读 · 0 评论