![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
「已注销」
这个作者很懒,什么都没留下…
展开
-
右左法则----复杂指针解析(函数指针与数组指针)
右左法则不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则原文:The right-left rule:Start reading the declaration from the innermost parentheses,go right,and转载 2016-09-17 17:26:25 · 1501 阅读 · 1 评论 -
const变量通过指针修改 详解
本来以为const变量是无法修改的,今天发现“错了”(其实没错,通过const变量本事是无法修改其值的,但是在“某些情况下”可以通过指向它的指针来间接修改)一、const变量可以通过指针修改的情况例子:#include <stdio.h>void main(void){ int const a = 10; int b = 20; int *p = (int*)原创 2016-03-12 20:42:35 · 5261 阅读 · 3 评论 -
c++四种分配内存的方法整理
只有calloc会自动初始化申请的内存为0calloc 函数: void *calloc(unsigned int num, unsigned int size)按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。 calloc申请内存空间后,会自动初始化内存空间为 0,但是malloc不会进行初始化,其内存空间存储的是一些随机数据。malloc 函数: void原创 2016-03-22 07:34:50 · 2265 阅读 · 1 评论 -
为啥要用(++i)分析++i和i++在效率上的区别
++i相当于下列代码 i += 1; return i; i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。i++相当于下列代码 j = i; i += 1; return j; ++i返回对象的引用;效率更高在内建数据类型的情况下,当然如果编译器会将这些差别都优化掉,那么效率就都差不多了。在自定义数据类型的原创 2016-03-19 21:27:08 · 724 阅读 · 0 评论 -
字符串常量 解析
实例: char *p = "kakaka"; //"kakaka"是字符串常量的地址 char s[] = "kakaka";//这里"kakaka"存放在栈区或者全局变量区 系统在执行前者的过程中,是先定义了一个字符串常量,之后用指针p指向它,而字符串常量是常量,故不可被更新,如语句*(p + 1) = ‘h’;是错误的语句,不会得到想要的结果; 而系统在执行后者的原创 2016-03-18 08:26:13 · 400 阅读 · 0 评论 -
说明一下++p 与 p++ 的区别。
假设这样的一个例子: “`c int p = -1; int y = 0; y = p++ + ++P;先分析一下它的汇编代码(没有优化):```csubl $40, %esp ; 分配40字节 movl $1, -16(%ebp) ; 存储 p movl $0, -12(%ebp) ; 存储 y原创 2016-03-15 22:59:17 · 6975 阅读 · 0 评论 -
原子操作和线程的并发执行
来源于题目: 两个等价线程并发的执行下列程序,a为全局变量,初始为0,假设printf、++、–操作都是原子性的,则输出肯定不是哪个?void foo() { if(a <= 0) { a++; } else { a--; } printf("%d", a);}选项: A. 01 B. 10 C. 12 D. 2原创 2016-03-03 08:30:58 · 1726 阅读 · 0 评论 -
STL vector提高效率注意事项与技巧
Vector是STL中最常用的容器,比起用户自定义的数组,具有内存分配对用户透明,可动态增长等特点。vector什么操作导致效率低? 毫无疑问,那就是当vector 预留空间不足时 常用操作push_back()函数在每次插入元素时会检测预留空间是否够用push_back()时预留空间不够用:要重新分配内存,并且拷贝当前已有的所有元素到新的内存区域。如果已有元素很多,这个操作将变的非常昂原创 2016-01-14 07:57:33 · 4394 阅读 · 0 评论 -
VS 统计整个项目总的代码行数
VS 统计整个项目总的代码行数vs如何快速统计项目总代码行数呢,如下: vs编辑 | 查找和替换 | 在文件中查找 查找选项选 选择正则表达式 ^b*[^:b#/]+.*$ 设置如下: 结果在查找结果的最后一行,如下原创 2015-12-07 09:08:45 · 31576 阅读 · 0 评论 -
c++操作符优先级表格 + 记忆方法整理
优先级操作符描述例子结合性1()[]->.::++--调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作用域操作符后置自增操作符后置自减操作符(a + b) / 4;array[4] = 2;ptr->age = 34;obj.age = 34;转载 2015-12-06 10:29:28 · 580 阅读 · 0 评论 -
VS2013 加快编译速度 的方法整理
VS2013 加快编译速度 的方法整理1.更改项目设置项目|属性|C/C++|代码生成|启用最小重新生成:Yes(/Gm)项目|属性|C/C++|常规|调试信息格式:程序数据库(/Zi)项目|属性|配置属性-链接器-常规-“启用增量链接”选择“是”2.使用多核编译Properties -> Configuration Properties -> C/C++ -> Geneal -> Mul原创 2015-12-04 15:19:46 · 11534 阅读 · 2 评论 -
xml 文件介绍
首先要明确的是:XML是被设计用来存储数据、携带数据和交换数据的,它不是为了显示数据而设计的。保存数据,交换数据 XML用于交换数据,通过XML,我们可以在不兼容的系统之间交换数据。在现实生活中,计算机系统和数据库系统所存储的数据有N^N种形式,对于开发者来说,最耗时间的就是在遍布网络的系统之间交换数据。把数据转换为XML格式存储将大大减少交换数据是的复杂性,并且还可以使得这些数据能被不同的程序原创 2015-12-02 21:22:18 · 533 阅读 · 0 评论 -
STL stack、queue 操作整理
STL stack、queue 操作整理 STL 的一大好处是stack和queue之间可以直接赋值,交换(swap),不用像自己用数组实现,逐元素操作(因为数组间复制只能逐元素复制)stack & queue 简单介绍几个: 1. operator = 说明可以同类型间赋值操作 2. swap() 操作是交换两个同类型的对象,eg: q1.swap(q2);//原创 2015-12-16 08:57:47 · 729 阅读 · 0 评论 -
(c++) int 转 string,char*,const char*和string的相互转换
一、int 和string的相互转换1 int 转化为 stringc++ //char *itoa( int value, char *string,int radix); // 原型说明: // value:欲转换的数据。 // string:目标字符串的地址。 // radix:转换后的进制数,可以是10进制、16进制等。 // 返回指向string这个字符串的指针原创 2015-11-26 15:02:53 · 9683 阅读 · 0 评论 -
类类型强制转换
reinterpret_cast:一个指针转化为其他类型的指针时,不做类型检测,操作结果是一个指针指向另一个指针的值的二进制拷贝;static_cast:允许执行隐式转换和相反的转换操作,父类转换为子类是强制转换Son *son=static_cast(father),而子类转换为父类就是隐式转换;dynamic_cast:用于对象的指针和引用,当用于多态类型转换时,允许隐式转换及相反的过程中,原创 2016-03-13 08:09:04 · 860 阅读 · 0 评论 -
c++抽象类和纯虚函数 知识整理
抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。 ⑴抽象类的定义: 称带有纯虚函数的类为抽象类。 ⑵抽象类的作用: 抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作。所以派生类实际上刻画了一组子类的操作接口的通原创 2016-02-29 10:34:25 · 792 阅读 · 0 评论 -
16位,32位,64位操作系统下,各类型的长度整理
特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较: (1)16位平台 char 1个字节8位 short 2个字节16位 int 2个字节16位 long 4个字节32位 指针 2个字节16位 (2原创 2016-03-01 07:47:23 · 6427 阅读 · 0 评论 -
C++重载、覆盖、隐藏详细定义以及实际区别
成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不原创 2016-08-06 15:47:13 · 451 阅读 · 0 评论 -
C++类对象空指针访问成员函数(静态绑定)
题目:class A{ public: void test(){printf("test A");}};int main(){ A*pA=NULL; pA->test();}结果是输出“test A”而不是程序崩溃,原因如下:一种解释: A*pA=null; pA->test();//当调用成员函数时,只是将实参null传给this指针test成员函数原创 2016-08-06 16:08:39 · 2736 阅读 · 0 评论 -
C语言运算符优先级 之 快速记忆
先摘录谭浩强《C程序设计》对运算符优先级的两点说明:1. 同一优先级的运算符,运算次序由结合方向来决定。 例如: a) * 与 / 具有相同的优先级别,其结合方向为自左向右,因此3 * 5 / 4的运算次序是先乘后除; b) - 和 ++ 为同一优先级,结合方向为自右向左,因此 - i ++ 相当于 - ( i ++ )。2. 从上述表中可以大致归纳出各类运算转载 2016-07-08 08:04:49 · 597 阅读 · 0 评论 -
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)1、cin 2、cin.get() 3、cin.getline() 4、getline() 5、gets() 6、getchar()附:cin.ignore();cin.get()//跳过一个字符,例如不转载 2016-06-16 08:26:10 · 299 阅读 · 0 评论 -
C++中map操作
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。 一、map的说明 1 头文件 #include 2 定义 map my_Map; 或者是typedef map MY_MAP; MY_MAP my_Map; 3 插入转载 2016-06-16 07:53:48 · 352 阅读 · 0 评论 -
位操心常见经典用法
位操作包括: 与 & 或 | 非(取反)~ 异或 ^ 左移 << 右移 >> 使用位操作实现常用功能1 快速判断偶数,判断最低位是0还是1即可,比求模运算快 x%2 != 0 // x正负都可以判断;不能用x%2 == 1,因为如果x为负奇数,x%2=-1 x&0x1 == 0 //最好最快的方法,使用与正负数都可 2 交换两个数,不用原创 2016-06-05 11:03:59 · 1543 阅读 · 0 评论 -
C++中的0长数组(柔性数组)
在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如:StructPacket{Int state;Int len;Char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持};首先对0长数组做一个解释:用途 :长度为0的数组的主要用途是为了满足需要变长原创 2016-06-14 09:09:43 · 664 阅读 · 0 评论 -
C++逗号运算符的作用
总的来说:逗号表达式没那么难,也很常用:逗号表达式无非是把若干个表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句(for语句)中。详细介绍如下:C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。这是C++语转载 2016-06-13 19:30:35 · 8857 阅读 · 0 评论 -
设计模式一 工厂模式Factory
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些原创 2016-05-26 10:40:18 · 1755 阅读 · 0 评论 -
单例模式最完整的讲解
这是一篇我见过的讲单例模式最完整的,也是讲的最好的一篇博客文章。3. 1 单例模式的动机 对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务管理器,如图3-1所示,我们可以做一个这样的尝试,在Windows的“任务栏”的右键弹出菜单上多次点击“启动任务管理器”,看能否打开多个任务管理器窗口?如果你的桌面出现多个任务管理器,我原创 2016-05-26 10:23:57 · 915 阅读 · 0 评论 -
swap函数 的几种实现与比较
前沿swap函数 用于交换 a ,b 两个数。实现方法大同小异,其中不乏有好多版本,现在就其性能和可读性略作分析。不对指出还望指正。。探讨:其中的函数原型是:(1) void swap(int &a,int &b);传引用(2)void swap(int *a,int *b);传地址下面就第二个函数原型分析,代码如下: #include <stdio.h> #include原创 2016-05-11 07:32:15 · 1894 阅读 · 0 评论 -
Java 和 c++的区别 (做题过程中整理)
JAVA没有指针的概念,被封装起来了,而C++有; JAVA不支持类的多继承,但支持接口多继承,C++支持类的多继承; JAVA不使用指针,不支持头文件,不支持宏定义,但是 JAVA可以动态分配内存 C++比较适合一些底层处理,JAVA比较适合开发应用,可以是WEB,也可以是手机端的Android。 C++支持操作符重载,JAVA不支持;JAVA的内存管理比C++方便,而且错误处理也原创 2016-03-01 07:54:52 · 486 阅读 · 0 评论 -
两个线程并发执行以下代码,假设a是全局变量,那么以下输出___哪个是可能的?
两个线程并发执行以下代码,假设a是全局变量,那么以下输出_哪个是可能的?int a=1;void foo(){ ++a; printf("%d",a);}解析假设线程x和y同时执行,x和y可随时被抢占,a的初始值为1A:3, 2 y先执行++a,a为2; y再执行printf,a入栈,在打印到终端之前切换到x x执行++a,a为3; x执行printf,输出3;再切换到原创 2015-12-28 08:38:09 · 10415 阅读 · 4 评论 -
C++文件 读写操作大全
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java] view plaincopyprint?#include ofstream //文件写操作 内存写入存储设备 ifstre转载 2015-11-18 10:29:45 · 640 阅读 · 0 评论 -
c++中堆和栈的的区别(stack vs heap)
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局转载 2014-12-18 15:57:45 · 6709 阅读 · 0 评论 -
enum枚举的意义
一直没怎么用过枚举enum,因为不会用,也不知道他的优点在何处,今天仔细看了看,以后要学着用了,很有必要: 看一些资料说枚举有助于减少buge,比较好奇,专门了解了下,原因如下 枚举类型是强类型的,从而保证了系统安全性。枚举可以限定参数的个数,对调用者的行为能更加严格地进行控制。把一些运行期的参数检查放到了编译期,这点很重要。原创 2014-12-16 16:39:50 · 8950 阅读 · 1 评论 -
iomanip 头文件介绍
我是在做AC转载 2014-10-16 16:25:06 · 9759 阅读 · 0 评论 -
c++怎么计算代码运行时间到超精确毫秒级别
//在windows下实现(毫秒级):DWORD dwStart = GetTickCount(); //取windows启动到现在的流逝时间(毫秒)Run_Your_Func(...); //运行你的函数DWORD dwUsed = GetTickCount() - dwStart; //计算该函数所消耗的时间方法三:这比微秒还准!依赖于你的处理器!!!转载 2014-10-05 20:28:45 · 2713 阅读 · 0 评论 -
VS2013中如何解决error C4996: 'fopen'问题
今天编写控制台应用程序时出现如下错误error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for转载 2014-10-04 16:03:42 · 2079 阅读 · 0 评论 -
fatal error LNK1168如何避免
链接出错, 一般都是找不到函数实现1. 却是没有定义函数,2. 在后面实现的,在前面调用,没有声明3. 库里面的函数,没有包含该lib原创 2014-10-03 20:23:27 · 1588 阅读 · 0 评论 -
c++中 cin.get();cin.getline();getline();gets();getchar()等输入函数的小结
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()1、cin>>转载 2014-11-08 21:50:22 · 701 阅读 · 0 评论 -
cerr和cout的区别
cout对应于标准输出流,默认情况下是显示器。这是一个被缓冲的输出,可以被重定向。cerr对应标准错误流,用于显示错误消息。默认情况下被关联到标准输出流,但它不被缓冲,也就说错误消息可以直接发送到显示器,而无需等到缓冲区或者新的换行符时,才被显示。一般情况下不被重定向。原创 2014-08-09 09:20:11 · 1160 阅读 · 0 评论 -
虚函数与纯虚函数
1、基本形式:virtual ReturnType Function_1(); //虚函数声明virtual ReturnType Function_2() = 0; //纯虚函数声明先讲示例吧,再总结结论。2、示例:class Animail{public: void Function_1() {cout };clas转载 2014-08-07 10:39:59 · 580 阅读 · 0 评论