![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 54
linersay
这个作者很懒,什么都没留下…
展开
-
学习STL源码_空间适配器_new
在提供的简单例子中看到一句 new(p) T1(value); 之前一直都没有见过这种用法。搜了一下:C++ 中 new 操作符内幕:new operator、operator new、placement new这篇文章里面有一篇引用C++中的new、operator new与placement new抄一些基本的:new operator/delete operator就是n...转载 2018-09-03 19:37:12 · 309 阅读 · 0 评论 -
assert()函数
今天,遇到一个函数返回值时引用,但是返回值存在为NULL的情况。下面是搜到的解决方案然后,就搜了搜assert()函数的用法,找到一篇,贴在下面assert()函数用法总结assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression )...转载 2018-04-13 16:14:52 · 13013 阅读 · 0 评论 -
static全局变量与普通全局变量的区别
懒得总结直接粘来源:点击打开链接全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。静态局部变量具有局部作用域,它只...转载 2018-03-27 18:20:39 · 460 阅读 · 0 评论 -
C++ 导入导出动态库
今天不明白为什么大家在写动态库的时候,都要用到#ifdef @@@@API#else#define @@@@ __declspec(dllimport)#endif为什么明明是导出动态库,还要用到dllimport。是因为别人用到我们提供的动态库的时候,会包含这个头文件,然后他们不会define @@@@API,所以会跳到else里面,他们需要导入,正好。摘抄:C++的dllexport和...转载 2018-03-27 16:59:01 · 2511 阅读 · 0 评论 -
模板的声明和定义 头文件与源文件
今天,写了一个List的模板类,然后把它的声明和定义分别放在头文件和源文件中,发现编译不通。然后,就有疑问了,一是为什么那些普通类我们分为头文件和源文件能编译通过,二是模板为什么不行,所以这个编译究竟做了什么,这才是我的问题。当我们对一个solution右键选择生成的时候,会对所有的.cpp进行编译(我感觉哈),每个对应生成一个.obj文件。当cpp进行编译时,那种有include头文件的,就是将...原创 2018-03-22 10:46:47 · 1783 阅读 · 0 评论 -
C宏定义——#号和##号
#:将后面的 宏参数 进行字符串操作,就是将后面的参数用双引号引起来 ;##就是用于连接,拼接。#define PRINT(NAME) printf("token"#NAME"=%d\n", token##NAME)int main(){ int token9=9; PRINT(9);//printf("token""9""=%d\n",token9);}#include &l..转载 2018-03-15 17:24:19 · 563 阅读 · 0 评论 -
extern "C"
由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于原创 2018-01-15 15:56:55 · 139 阅读 · 0 评论 -
c指针与函数参数传递方式
今天,知道了一个好像醍醐灌顶的东西,大学四年真的学的太少啦。/首先,已经知道C++中的函数参数传递方式有两种:按值传递和按引用传递。其中按引用传递分为,用引用参数和用指针参数传递。一个变量的引用参数和它指向同一地址,所以用引用参数按引用传递,传递的就是原来的参数,而并不是该参数值的拷贝,也是早就知道的。那用指针参数传递按引用传递,之前的想法可能有错。指针,假设int val = 1原创 2017-10-20 10:39:47 · 619 阅读 · 0 评论 -
C函数参数压栈问题
今天写了一个sprint_f(),发现了一个大问题。int main(){ char str[32] = "abcd"; for(int i = 0; i < 32; ) { printf("%c_%c", str[i], str[i++]); } return 0;}按道理这个后加加应该不会影响前面的,输出的应该是aabbccdd但是,不是的!输出是原创 2017-10-19 09:45:24 · 368 阅读 · 0 评论 -
C void*
若想在void* 上进行指针地址的加减操作实现移动,需要强转为自己想要的类型如char*原创 2017-09-18 16:09:38 · 392 阅读 · 0 评论 -
operator 的用法
1. 操作符重载略2.点击打开链接点击打开链接点击打开链接点击打开链接点击打开链接转载 2017-08-16 17:00:51 · 897 阅读 · 0 评论 -
关于临时变量的返回
今天写一个+的重载,计算结果只能返回一个临时变量对象,但是这个对象比较复杂,里面有一些指针成员变量。然后,发现在这个函数结束,也就是return这个临时变量时,进到了这个对象的类的析构函数中,这是可以理解的,因为临时变量会在函数结束前析构掉。然后,出了这个重载函数,到调用这个加号重载的那句语句A,在A到下一句之间,又进了一次析构函数。然后我的程序就崩掉了。想了好久,猜到了一个原因应该是返回值的析构...原创 2018-09-17 16:58:58 · 1118 阅读 · 0 评论