![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
jiliu_yongjin
这个作者很懒,什么都没留下…
展开
-
C++中的explicit关键字
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2014-11-24 20:27:15 · 270 阅读 · 0 评论 -
const函数特点
c++的const函数特点:1. 不能在const函数中修改所在类的对象的数据,因为const函数中的*this是常量,同样只能访问const函数;2. const函数中只能调用其他的const函数,不能调用非const函数,因为对象调用函数是需要传递对象自己,const函数中的*this是常量,非const函数中的*this是变量,因此不可以调用(除非去除*this的const属性);原创 2015-10-05 23:11:14 · 446 阅读 · 0 评论 -
操作系统用户态和内核态之间的切换过程
操作系统用户态和内核态之间的切换过程1. 用户态和内核态的概念区别究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子 void testfork(){ if(0 = = fork()){ print转载 2015-10-05 23:23:47 · 548 阅读 · 0 评论 -
抽象类的特点
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。抽象类具有以下特性:抽象类不能实例化。抽象类可以包含抽象方法和抽象访问器。不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。从抽象类派生的非抽象类原创 2015-09-09 21:51:48 · 613 阅读 · 0 评论 -
希尔排序
void shell_sort(int a[],int n){ int gap,i,j; for(gap=n/2;gap>0;gap/=2) for(i=gap;i<n;i++) for(j=i-gap;j>0&&a[j]>a[j-gap];j-=gap) swap(a[j],a[j+gap])原创 2015-10-08 23:04:22 · 211 阅读 · 0 评论 -
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。 堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。堆可以动转载 2015-09-22 09:29:50 · 245 阅读 · 0 评论 -
C/C++ 中的0长数组(柔性数组)
在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如:StructPacket{Int state;Int len;Char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持}; 首转载 2015-10-26 20:21:43 · 300 阅读 · 0 评论 -
成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
1、成员变量包括实例变量和类变量;而成员方法包括实例方法、类方法,当然还有一种特殊的构造方法。2、类变量、类方法就是类中的变量、方法,必须是静态的,要加static;故其又称静态变量、静态方法。3、成员变量、成员方法是对象或实例中的变量、方法,不加static;类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只有一个地方存储这个变量。而且所有的实例都可以修原创 2015-10-12 14:21:29 · 484 阅读 · 0 评论 -
STL底层数据结构
STL底层数据结构实现:STL底层数据结构支持vector数组快速随机访问list双向链表快速增删deque中央控制器和多个缓冲区首尾(中间不能)快速增删和随机访问stack list或deque queue list或dequ原创 2015-12-07 10:18:21 · 384 阅读 · 0 评论 -
C++中值传递,地址传递,引用传递的区别
一.函数参数传递方式之一:值传递1. 值传递的一个错误认识 先看题一中Exchg1函数的定义:void Exchg1(int x, int y) //定义中的x,y变量被称为Exchg1函数的形式参数{ int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d\n”,x,y)}问:你认为这个函数是转载 2015-09-10 23:18:29 · 442 阅读 · 1 评论 -
C++使用模板类
(1)可用来创建动态增长和减小的数据结构 (2)它是类型无关的,因此具有很高的可复用性。 (3)它在编译时而不是运行时检查数据类型,保证了类型安全 (4)它是平台无关的,可移植(5)可用于基本数据类型原创 2015-09-10 23:06:09 · 299 阅读 · 0 评论 -
c++右值引用
点击打开链接转载 2014-11-20 21:39:25 · 274 阅读 · 0 评论 -
eax,ebx,ecx,edx,esi,edi,ebp,esp寄存器的作用
eax,ebx,ecx,edx,esi,edi,ebp,esp寄存器的作用eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。比方说:add eax,-2 ; //可以认为是给变量eax加上-2这样的一个值。这些32位寄存器有多种用途,但每转载 2014-11-13 10:52:11 · 884 阅读 · 0 评论 -
断言(Assert)的用法
断言(ASSERT)的用法 我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”。 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句:if(假设成立){ 程序正常运行;}e转载 2014-11-12 20:36:33 · 358 阅读 · 0 评论 -
const char* char*和string之间的转换
1. const char* 和string 转换(1) const char*转换为 string,直接赋值即可。 EX: const char* tmp = "tsinghua". string s = tmp;(2) string转换为const char*,利用c_str() EX: string s = "ts转载 2015-01-31 21:59:25 · 458 阅读 · 0 评论 -
指针常量和常量指针的区别
常量指针:const int *a或者int const *a指向常量的指针(指针本身是变量,可以被修改)int a = 5;int c=7;const int *b=&a;*b=6;//不合法,指针指向的值不可以被修改const int *b=&c;//合法,指针本身的地址值可以修改指针常量:int * const*a指针本身不可以修改原创 2015-09-02 21:58:17 · 309 阅读 · 0 评论 -
fork()函数理解
fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid)在fork()的调用处,整个父进程空间会原模原样地复制到子进程中,包括指令,变量值,程序调用栈,环境变量,缓冲区,等等。原创 2015-09-24 22:52:12 · 280 阅读 · 0 评论 -
typedef与#define的区别t
1、用法:typedef int INT;#define INT int2、区别宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。typedef (int *) PINT;#define PINT2 int*PINT a,b与int * a,i转载 2015-09-11 09:30:27 · 344 阅读 · 0 评论 -
指向函数的指针
int (*p)( int,int ); 用来定义 p 是一个指向函数的指针变量该函数有两个整形参数,函数值为整形。注意 *p 两侧的括号不可省略,表示 p 先与 * 结合,是指针变量,然后再与后面的 ( ) 结合,表示此指针变量指向函数,这个函数值 (即函数的返回值) 是整形的。int *p ( int,int ) 由于( )的优先级高于 *,它就成了声明一个函数P( 这个函数原创 2015-09-05 23:23:37 · 269 阅读 · 0 评论 -
字符串转int/float/double
#include#include using namespace std;template Type stringtoNum(const string& str){istringstream iss(str);Type num;iss>>num;return num;}int main(){string str("1234.5678");原创 2016-07-15 15:14:52 · 318 阅读 · 0 评论