c/c++
文章平均质量分 94
This is bill
这个作者很懒,什么都没留下…
展开
-
静态编译与动态编译
静态编译与动态编译的区别 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。 静态编译就是转载 2015-07-03 09:56:28 · 1169 阅读 · 0 评论 -
int i=1,j=2; int k=i+++j;
因为运算符优先级为++大于+所以第二条语句应该是k=(i++)+j分解为下面的步骤1.i+j;(由于i++是先使用i值在表达式中进行运算,再自加1)2.k=第1步的结果3;3.i++;(i从1自加为2)这样,再深究一点:为什么 j=++i+++i+++i 输出j是10?j=(++i)+(++i)+(++i)=(((++i)+(++i))+(++i))原创 2015-07-09 17:22:24 · 5981 阅读 · 1 评论 -
虚函数与多态小览
Bill又写文章来由了哇~~早就想好好搞清这个问题了,这是c++领域里面比较难搞定的一块知识点,而且最近在看设计模式,里面有涉及这块,之前学过的不用容易玩忘记,于是就干脆研究透一点,也好碰到、用到的时候不心慌~于是有了这篇文章。原创 2015-07-25 17:16:46 · 2047 阅读 · 0 评论 -
::全局作用
直接上代码:#include using namespace std;int zhou=16;int main(){ int zhou=12; //局部变量 if (true) { int zhou = 10; if (true) { cout<<::zhou<<endl; } }}运行结果:16原创 2015-07-03 15:19:53 · 937 阅读 · 0 评论 -
第一个makefile
刚刚写出了第一个最简单的makefile,更深刻的理解了Linux下make和编译链接的原理,例子很简单edit : main.o MakeAdd.o cc -o edit main.o MakeAdd.omain.o : main.c makeAdd.h cc -c main.cMakeAdd.o : MakeAdd.c cc -c MakeAdd.cclean : rm e原创 2015-07-05 15:24:06 · 1050 阅读 · 0 评论 -
如何理解int *(*a[5])(int, char*);
int *(*a[5])(int, char*); 拆开来分析:typedef int* (*f)(int,char*);f a[5];所以a是个5个元素的数组,每个元素为函数指针.可用代码验证:#include #include int* (*a[5])(int,char*);int *foo(int n, char *s){ int *p;原创 2015-07-03 14:44:23 · 3904 阅读 · 0 评论 -
typedef 语句的理解
首选先看一下typedef的四个用途和两个陷阱用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同转载 2015-07-03 14:33:32 · 829 阅读 · 0 评论 -
指针函数与函数指针
一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函转载 2015-07-03 15:21:45 · 790 阅读 · 0 评论 -
文本文件和二进制文件的区别
讲的很透彻从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASC码: 00110101 00110110 00110111 00111000 ↓ ↓ ↓ ↓十进制码: 5 6转载 2015-07-05 17:06:56 · 970 阅读 · 0 评论 -
inline函数的用处
比如 int g(int x) { return x + x; } int f() { return g(); } 这样f会调用g,然后g返回x + x给f,然后f继续把那个值返回给调用者。 如果g是inline的话。f会被直接编译成。 int f() { return x + x; } 相当于把g翻译 2015-07-05 21:25:13 · 1229 阅读 · 0 评论 -
"n\x45y\123\t"长度
字符串长度。。。这种老生常谈的问题还是有很多新考法求"n\x45y\123\t"长度,答案是6#include using namespace std;int main(){ cout<<sizeof("n\x45y\123\t")<<endl; cout<<"\x45"<<" "<<sizeof("\x45")<<endl; cout<<"\123"<<" "<<siz原创 2015-07-06 21:49:49 · 2589 阅读 · 0 评论 -
浮点数原理探究
今天听到实验室有人问道浮点数的实现机制,之前刚好研究过原码、反码、补码、移码的关系,而这类问题很底层,一般容易忽视。干脆打破沙锅问到底,彻底搞清楚这个问题并留下证据,于是就有了这篇博文。原创 2015-07-13 17:41:30 · 3299 阅读 · 0 评论 -
补码与模
本篇来由昨天进行了反码、补码那些和浮点数的研究,但是还有一些问题遗漏,晚上跟寝室众基友讨论了,反而提出来一个很有意思的问题,于是有了本篇~~我们并不知道为什么有补码这个东西,只知道在计算机中广泛用补码存储,不知道为什么叫“补”码。原创 2015-07-14 08:17:35 · 16175 阅读 · 4 评论 -
页面置换算法
本来是一个师妹提的问题,顺便就把这个更加巩固一下,经典的页面置换算法#include#include#include#define INVALID -1#define TRUE 1#define FALSE 0using namespace std;struct page //页面控制块结构{ int page_number; //页面的页号,用来记录该页面在内存中对应的页面原创 2015-07-06 23:16:15 · 1114 阅读 · 0 评论 -
关于重载二义性
C++编译器只根据函数参数表,也就是参数类型和个数进行重载版本的调用匹配,函数返回值不顶用另外,函数默认参数时会产生二义性,代码必须这样调用才是对的。#include using namespace std;int max(int a,int b){ return a<b?b:a;}int max(int a,int b,int c=0){ cout<<"c =原创 2015-07-06 21:43:55 · 1472 阅读 · 0 评论 -
经典CUDA教程
CUDA从入门到精通(零):写在前面在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追求速度的应用来说无疑是一个理想的选择。还有不到一年毕业,怕是毕业后这些技术也就随毕业而去,准备这个暑假开辟一个CUDA专栏,从入门到精通,步步为营,顺便分享设计的一些经验教训,希望能转载 2015-07-15 16:18:43 · 2959 阅读 · 0 评论 -
【讨论贴】关于父实子虚的疑问???
父实子虚就是:父类非虚函数,子类继承变成虚函数,会发生什么昨天就提问了,但是没有满意的答案,地址:http://ask.csdn.net/questions/198077想法很奇葩,运行结果更是奇葩,大家看应该怎么解释一下,运行环境是vs2012 release Win32平台代码: #includeusing namespace st原创 2015-08-05 19:33:18 · 1424 阅读 · 0 评论 -
sizeof(void*)
在vs中,Win32 和 X64 的结果不同: (1)Win32 平台结果是4 (2)X64平台结果是8只要是指针,不只是void*,包括char* 或 int*,结果都是一样。 原因就是指针存放的是内存地址,所以Win32 索引32位地址(4字节),X64索引64位地址(8字节) 最后给一段干坏事的代码,很简单,但是跟上面说的贴切,用 Win32 指令编译是只能吃掉4G,但是用 X64 就原创 2015-07-17 12:23:45 · 6845 阅读 · 0 评论 -
关于C++中公有继承、私有继承、保护继承的讨论
简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题。原创 2015-07-29 20:55:44 · 2873 阅读 · 3 评论 -
depends.exe 使用说明
希望将Qt项目用在其他机器,用到 depends.exe,但不是太了解 depends.exe 各个窗口的意义,之后我会写一篇文章专门探讨 dll 和 lib 也会用到 depends.exe,但在这里简单说明用法。原创 2015-07-31 10:19:32 · 14885 阅读 · 0 评论 -
关于Java与c++隐藏、重写不同实现机制的探讨
本人现在用c++更多,但是以前Java也写过不少,Java和c++很像,但是深入挖一些,Java跟c++的区别很大,就拿刚刚发的另一篇博文虚函数与多态小览来说,里面就感觉有很多不同了,至少“重写”在这两个语言里面的理解就不同了~~跟基友一番讨论,决定把这个问题彻底捋一捋,因为这个是探讨,所以有不同想法欢迎提出和评论。原创 2015-07-25 20:24:37 · 1927 阅读 · 0 评论 -
关于头文件是否参与编译的讨论
一、文章来由写项目的时候发现了这个问题,又是一个比较底层的问题,首先说明,这篇文章只是我根据查阅的资料和做的实验提出的一个讨论,并不一定就是正确答案。因为这个问题网上众说纷纭,我很欢迎大家参与这个讨论,一起搞懂这个问题~~~二、问题的提出问题就是。。。2.1 问题1(主问题): 头文件是否真正参与编译?先上一个网上的标准答案: .h的内容被插入到.c中,作为.c的内容被编译。.h文件本身不原创 2015-08-01 12:23:59 · 6893 阅读 · 2 评论 -
sizeof小览
一道面试题迁出的探究我发现我已经形成一种习惯写来由了,以后看博客的时候可以让我回忆起为什么出现这个问题,我用什么方法解决的,既然形成习惯就让这个习惯保持下去吧。今天实验室师姐在看书,一处不解,是关于sizeof的,大家讨论此问题后,我一向信服做了才知道答案,于是有了这篇文章。但是只能叫小览,因为不可能总结完sizeof的用法,欢迎补充和讨论。原创 2015-07-23 00:01:38 · 4347 阅读 · 17 评论 -
什么叫编译时和运行时
以前经常听说编译时和运行时的概念.但没太搞明白具体代表啥意思.后面花了点时间研究了下.总算知道个大概意思了.编译时编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.另外还有啥链接器.汇编器.为了转载 2015-07-21 18:26:27 · 1101 阅读 · 0 评论 -
系统设计---笔记
一、记录一下系统类设计和架构的思考1、弄清需求2、不要考虑太细致的变量,在纸上罗列功能3、考虑变化原创 2015-08-03 15:34:18 · 953 阅读 · 0 评论 -
C++抽象类小览
virtual 方法和 virtual 类可以说是c++语言的一大特性,甚至有人说是c++语言的精髓,其实这么说也是有一定道理的,因为运行时多态在c++中体现淋漓尽致,而 virtual 就是为多态服务的。这也是一个一定要搞懂的c++问题,所以有了这篇文章。同时,我觉得这类底层问题不可能一文以蔽之,而且我也相信真正想搞懂这个问题的读者,不会只读我这一篇文章,所以只是小览,同时欢迎讨论和指正原创 2015-08-02 09:23:51 · 1785 阅读 · 0 评论 -
volatile关键字的用法
代码编译环境:VS2012 Win32平台volatile是“易变的”、“不稳定”的意思。volatile是C/C++的一个较为少用的关键字,它用来解决变量在“共享”环境下容易出现的读取错误的问题。volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++在产生release版可转载 2015-07-22 09:38:29 · 1133 阅读 · 0 评论 -
阻塞模式和非阻塞模式
好文得转~~~何为阻塞? 从该网络通讯过程来理解一下何为阻塞 : 在以上过程中若连接还没到来,那么 accept 会阻塞 , 程序运行到这里不得不挂起, CPU 转而执行其他线程。 在以上过程中若数据还没准备好, read 会一样也会阻塞。 阻塞式网络 IO 的特点:多线程处理多个连接。每个线程拥有自己的栈空间并且占用一些 CPU 时间。每个线程遇到外部为准备好转载 2015-07-23 18:27:32 · 1209 阅读 · 0 评论 -
程序编译后运行时的内存分配
太好的文章了,看到不得不转,转自:http://blog.sina.com.cn/s/blog_5420e0000101a0w1.html一、编译时与运行时的内存情况1.编译时不分配内存编译时是不分配内存的。此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确。所以声明是给编译器看的,聪明的编译器能根据声明帮你识别错误。2.运行时必分配内存运行转载 2015-07-22 10:00:13 · 3321 阅读 · 0 评论 -
extern关键字
百度百科关于这个的总结不错。转载 2014-11-20 18:39:04 · 1105 阅读 · 0 评论 -
mooc 第五章 习题
Q1某二叉树有n个节点,高度为h。在其中插入一个新的节点,高度发生改变的节点个数最多为:O(1)O(n)O(h)O(hlog2(n)) 您已经提交0次,共有2次提交机会。Q2高度为h的完全二叉树可能有多少个节点?2h+12h2h−1−12h−1 您已经提交0次,共有2次提交机会。Q3下列原创 2013-12-03 09:59:06 · 4823 阅读 · 2 评论 -
DLL中传递STL参数
以下是自己在调测代码过程出现问题后,搜索出来的资料,虽然很乱,但明白了在跨DLL传递stl中的容器类对象时存在问题的原因及解决办法,故保存之。STL跨平台调用会出现很多异常,你可以试试.STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释。转载 2015-09-02 15:44:42 · 1390 阅读 · 0 评论 -
关于c++显示调用析构函数的陷阱
现在在写一个项目,需要用到多叉树存储结构,但是在某个时候,我需要销毁这棵树,这意味着如果我新建了一个树对象,我很可能在某处希望将这个对象的声明周期终结,自然会想到显示调用析构函数,但是就扯出来这么大个陷阱。原创 2015-09-07 19:27:26 · 7175 阅读 · 5 评论 -
【模板】c++ template模板实现string到Num的转换
很早以前就写了这个模板类的简单模板,但是没写成博客,方便以后自己找原创 2015-09-03 13:48:41 · 1209 阅读 · 0 评论 -
c++ get与set方法的宏定义实现
一、文章来由国庆节依然顽强的码代码,项目中需要用到 get 和 set 方法,但是问题来了,因为是 c++ 的,并不像 java 的 eclipse 有自动生成 get 和 set 方法。如果手写是可以,但是当属性特别多的时候会非常麻烦。。。但是宏定义方法可以搞定这个问题~~二、具体代码2.1 非指针类型成员变量// PropertyBuilderByName 用于生成类的成员变量// 并生成se原创 2015-10-01 16:29:53 · 10110 阅读 · 0 评论 -
多线程调用静态方法
一、文章来由项目需求,可能要在多线程中使用静态方法。二、静态方法与线程安全类的成员分为两类,静态成员(static member)和实例成员(instance member)。静态成员属于类,实例成员则属于对象,即类的实例。 我们在知道, 静态字段(static field)和静态方法(static method)的调用是通过类来调用。静态方法不对特定的实例操作,只能访问静态成员。实例方法可对特原创 2015-10-19 16:20:55 · 3507 阅读 · 0 评论 -
为什么不能在子类的初始化列表里初始化父类的成员
前段时间写了一段代码,其等价形式如下:class A {protected: int n_;};class B : public A {public: B() : n_(0) {}};class A {protected : int n_ ;} ;class B : public A {pu转载 2015-11-13 12:12:50 · 2209 阅读 · 0 评论 -
关于0x
一个常见问题,但是这里全部总结一下。前面加:(1)0b表示二进制(2)加0x表示十六进制(3)数字前加0表示八进制(4)'\077' 是8进制表示,0可以省略,因为C/C++规定不允许使用斜杠加10进制数来表示字符(5)'\0x3F' 是16进制表示特别注意,前面是0,而不是oint o123;int a = o123原创 2015-12-01 15:55:54 · 1254 阅读 · 0 评论 -
Unicode编码完全探究
一、文章来由好久没有写博客了,最近博主再做一个比较大的项目,这个项目可能要延续到明年4月份左右,不过我还是尽量找时间写博客。说完题外话,关于这个题目选择,因为这是一个没有完全搞懂的问题,所以需要把它搞懂~~二、从ASCII码说起1、ASCII的出现 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,原创 2015-12-02 07:42:23 · 1555 阅读 · 0 评论 -
Unicode编码完全探究(二)
一、文章来由上一篇文章我们已经探究了基本的Unicode编码,这一篇继续来探究Unicode编码~~~二、字符简史很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器原创 2015-12-02 09:51:58 · 1531 阅读 · 0 评论