
C++
Marvin-nj
技精为专
展开
-
vs2019下DLL的创建及使用注意事项
创建过程不多讲,这里主要关注一些实际应用问题:代码应该同时考虑32和64位平台兼容情况,数据类型需要区分清楚。 交付使用时,应当将dll从CRT中剥离出来,或者拷贝对应的MSVCRTD.LIB,如:MSVCR80.DLL----> vs2005, MSVCR90.DLL---->vs2008, MSVCR100.DLL---->vs2010 在项目->属性-&g...原创 2020-03-04 17:03:03 · 2587 阅读 · 0 评论 -
define,const与inlin
1> define与const1.编译器处理阶段不同:define宏在编译预处理阶段展开, const常量在编译阶段使用2.类型安全检查不同defined宏没有类型,不做类型检查,只做简单的展开const常量有类型,在编译阶段会执行类型检查3.存储方式不同define定义的常量在替换后运行过程中会不断地占用内存,在内存中有若干份copy,而const定义的常量存储在数据段,只有一份copy...原创 2016-07-22 20:47:27 · 272 阅读 · 0 评论 -
static,const关键字作用
static关键词作用:1、作用域隐藏。当一个工程有多个文件的时候,用static修饰的函数或变量只能够在本文件中可见,文件外不可见。2、全局生命周期。用static修饰的变量或函数生命周期是全局的。被static修饰的变量存储在静态数据区。3、static修饰的变量默认初始化为0.4、static修饰的变量或函数是属于类的,所有对象只有一份拷贝。因此,不能够将静态函数设置为虚函数。1:定义con...原创 2016-07-22 21:16:32 · 497 阅读 · 0 评论 -
几种强制转换
1.reinterpret_cast::转换一个指针为其它类型的指针,一个指针到另一个指针的值的二进制拷贝,不做类型检查。2.const_cast:用于类型转换掉表达式的const或volatile属性。3. static_cast:在功能上基本上与C风格的类型转换一样,基本得转换方式。4. dynamic_cast:它被用于安全地沿着类的继承关系向下进行类型转换,多态情况下常用,进行转换后的类型...原创 2016-07-22 21:51:53 · 363 阅读 · 0 评论 -
定义一个只能在堆上(栈上)生成对象的类
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。 动态建立类对象,是使用new运算符将对象建立在堆空间中。这个过程分为两步,第...转载 2016-07-22 16:18:25 · 344 阅读 · 0 评论 -
动态创建二维数组
1.C++中 使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组int **b=new int*[row]; //分配一个指针数组,将其首地址保存在b中 for(i=0;ib[i]=new int[col];该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:for(i=0;i{de原创 2016-05-28 17:16:34 · 785 阅读 · 0 评论 -
strcmp源码
/****strcmp - compare two strings, returning less than, equal to, or greater than**Purpose:* STRCMP compares two strings and returns an integer* to indicate whether the first is less原创 2016-08-11 11:12:03 · 444 阅读 · 0 评论 -
数组名总结
1、数组名作为参数时,退化未指针,不具有sizeof()属性:2、数组名是常量指针,不可以被修改(指针本身不可以被修改,指向的值可以改变):char a [20];a="abcd";//错误,试图使常量指针改变char a[20]="abcd";//通过,可以直接初始化原创 2016-08-02 11:50:43 · 304 阅读 · 0 评论 -
关于eof的烦恼
int main(){ ofstream f2("c:\\read.txt"); if(f2.good()) { f2.write("abcd",5); } f2.close(); char ch; //f.seekg(ios::beg); ifstream f1("c:\\read.txt"); while(!f1.eof()) { f1>>ch;原创 2016-07-20 09:45:30 · 510 阅读 · 0 评论 -
strcpy,memcpy,memmove的内存重叠
1、strcpy不考虑内存重叠函数原型如下:char *strcpy(char *strDest, const char *strSrc){ assert((strDest!=NULL) || (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != ‘\0’ )原创 2016-07-19 17:29:23 · 356 阅读 · 0 评论 -
memcpy函数
void *memcpy(void *dst, const void *src, size_t len){ if(NULL == dst || NULL == src){ return NULL; } void *ret = dst; if(dst = (char *)src + len){ //没有内存重叠,从低地址开始复制 while(len--){ *转载 2016-07-19 16:16:18 · 507 阅读 · 0 评论 -
内存字节对齐
定义一个结构体的一般形式为:struct 结构体名{//类型说明符 成员名;};例如有如下结构体:struct Stu{int id;char sex;float hight;};那么一个这样的结构体变量占多大内存呢?也就是cout在了解字节对齐方式之前想当然的会以为:sizeof(Stu) = sizeof(int)+siz转载 2016-07-22 16:44:31 · 257 阅读 · 0 评论