编程语言
文章平均质量分 63
Henryinferno
这个作者很懒,什么都没留下…
展开
-
C和C++特性和限制的区别
摘自《C专家编程》在C++中存在,但在C语言中不存在的限制有:在C++中,用户代码不能调用main函数,但在C语言中确实允许的(不过这种情况很少见)。完整的函数原型声明在C++中是必须的,但在C语言中却没有这么严格。在C++中,有typedef定义的名字不能与已有的结果标签冲突,但在C语言中却是允许的(它们分属不同的名字空间)。当void*指针赋值给另一个指针时,C++规定必须进行转载 2014-01-03 17:52:22 · 695 阅读 · 0 评论 -
具有默认实参的构造函数的类的对象的生成方法。
#include using namespace std;class Rectangle {public: Rectangle():x1(0),x2(0),y1(0),y2(0){cout<<"default"<<endl;} // Rectangle(int a1 = 0, int a2 = 0, int a3 = 0, int a4 = 0); ~Rectangl原创 2016-09-12 19:19:30 · 547 阅读 · 0 评论 -
《effective C++》读书笔记(一)
1.类中遇到需要使用#define的地方要尽量避免。1) 在类中避免#define NUM 10int array[NUM];使用枚举变量解决,即enumhack。2) 在类中避免#define MAX(a,b) f((a) >(b) ? (a) : (b))使用templateinline解决template inline void m原创 2016-09-08 21:01:38 · 231 阅读 · 0 评论 -
《effective C++》读书笔记(三)
23.编译器查找某个函数或变量的过程:假设这个函数是某个派生类的成员函数local作用域(函数内)->该派生类的作用域->该派生类基类的作用域->内含基类的namespace作用域->global作用域。参考:《effective c++》p157 24.派生类内的名称会遮掩基类的名称(比如基类内有若干重载成员函数飞f(),派生类内又实现了自己的重载版本,那么public继承并原创 2016-09-08 21:10:01 · 274 阅读 · 0 评论 -
new限定区域分配内存
#include #include#include //需要添加该头文件using namespace std;const int ARRLEN = 100;int static_buf[ARRLEN];//静态区const int N = 5;int main(){ int *p1,*p2; cout<<"static_buf address:"<<stati原创 2016-09-08 20:54:39 · 937 阅读 · 0 评论 -
宏定义中使用do{}while(0)的好处
#define MACRO_NAME(para) do{macro content}while(0)的格式,总结了以下几个原因:1,空的宏定义避免warning:#define foo() do{}while(0)2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现:转载 2014-05-21 18:32:07 · 476 阅读 · 0 评论 -
《effective C++》读书笔记(二)
11.1) 如果你为class添加一个成员变量(尤其是类成员变量),你必须同时修改copying函数,所有构造函数以及任何非标准形式的operator=。2) copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”。在子类中要注意调用基类的构造函数(或copying构造,或operator=等)来完成对基类的操作。3)原创 2016-09-08 21:05:32 · 275 阅读 · 0 评论 -
C语言变长参数实现以及它们在栈上的分布
#include #include #include void fun(int num, ...){ int *p = &num + 1; printf("%p-->%d\t", p - 1, *(p - 1)); va_list args; va_start(args, num); printf("%p-->%d\t", args, *args); while (num-原创 2016-10-16 18:24:53 · 577 阅读 · 0 评论 -
虚函数和动态绑定中一个易忽略的知识点
#includeclass B{public: void fb(){fun();} virtual fun(){std::cout<<"B::fun"<<std::endl;}};class D:public B{public: fun(){std::cout<<"D::fun"<<std::endl;}};int main(void){ B *basePt原创 2016-10-17 21:16:51 · 271 阅读 · 0 评论 -
C++虚函数的实现机制
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的转载 2016-11-10 12:23:18 · 274 阅读 · 0 评论 -
gcc和g++的区别
一:gcc与g++比较 编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而 c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以转载 2016-11-18 15:05:26 · 395 阅读 · 0 评论 -
C++命名空间namespace的使用规范
1.命名空间namespacens{………//将内容添加到命名空间中}using namespace ns;……..//声明命名空间后,表示ns命名空间里面的内容对于这条声明后的代码是可见的。但是如果声明了两个命名空间ns1,ns2。且ns1和ns2中包含相同的全局变量,或函数或类,那么就可能会产生冲突。using namespace ns1;u原创 2016-09-09 20:30:04 · 8820 阅读 · 3 评论 -
lua,python,c++
网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下: 1、两者的定位不同。python的定位在于自身的独立开发,即是说python定位于自己能解决所有的问题。lua定位在与其它的代码,尤其是C++代码进行相互配合的编译,单独的Lua本身没有任何的意义。 2、站在解决问题的角度上看。python依靠自身越来越强大的库,转载 2014-06-11 22:54:04 · 646 阅读 · 0 评论 -
Named Return Value Optimization (具名返回值优化)
Named Return Value Optimization 具名返回值优化 问题描述 :当一个函数返回一个对象的实例,一个临时对象被创建并通过拷贝构造函数传回其值。 C++ 标准允许省略拷贝构造函数的对象(即使会导致程序结果的不一致)。前提是所有的路径返回相同的对象。 问题由来: 看如下的函数:X bar() { X xx; //… 处理 xx转载 2014-05-17 14:22:32 · 880 阅读 · 0 评论 -
iostream.h和iostream 区别
C++中新定义的方法都是有名字空间的 比如cout就属于std名字空间 如果include头文件的时候加上.h,默认会using namespace 否则需要自己加上 using namespace XXX 对于C中已经定义的方法如printf,没有影响的iostream.h是包含输入/输出流处理的头文件,iostream就什么都不是了 但用iostream要加名词空间namesp转载 2014-01-03 15:57:53 · 699 阅读 · 0 评论 -
理解二级指针
举两个小例子给你看吧。1。用二级指针动态申请二维数组。void main(){ int m , n , **p; scanf("%d%d" , &m , &n); p = (int **)malloc(m * sizeof(int *)) //C++中建议使用:p = new int* [m]; for(i = 0 ; i原创 2014-01-05 15:11:50 · 791 阅读 · 0 评论 -
static关键字在c++中的运用
1、什么是static? static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。2、为什么要引入static? 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定转载 2014-01-11 16:58:50 · 533 阅读 · 0 评论 -
C++开发者都应该使用的10个C++11特性
在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的 常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下面是我总结的,C++开发者都需要学习和使用的C++11新特性。 auto 在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类转载 2014-05-04 10:34:08 · 431 阅读 · 0 评论 -
C++ ofstream和ifstream详细用法
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout 2、转载 2014-05-04 10:54:06 · 486 阅读 · 0 评论 -
c++标准IO流
流是一种概念模型,简单的想,可以看成是“一串byte”,它从某处产生(originate form somewhere),然后会流到某处去(destination to somewhe),从抽象的层面来看,stream的origination和destination是不需要程序员考虑到,程序员只需要考虑从stream提取怎样的信息,然后需要将什么信息放入stream中即可进行编程。就常见的编程转载 2014-05-05 19:25:19 · 559 阅读 · 0 评论 -
制作可执行的JAR文件包及jar命令详解
常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了;而另一种是使用 JET 来进行 编译。但是 JET 是要用钱买的,而且据说 JET 也不是能把所有的 Java 程序都编译成执行文件,性能也要打些折扣。所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Ja转载 2014-04-06 12:43:15 · 508 阅读 · 0 评论 -
Java C++ 服务比较
1、内存占用,C++占优:jvm的垃圾回收原理下,old区只有到70%才会回收,否则系统为了效率,不会强制做fullgc,因此假如一开始分配了 -xms = xmx = 2g, -xmn = 512m的情况下,整个服务占用内存很容易达到1g以上。 而C++写的服务,由于上次应用自己控制内存,用完马上释放,因此内存占用非常小。 比如apache一个进程常常只占据几十M内存。2、底层功转载 2014-03-26 20:04:06 · 639 阅读 · 0 评论 -
关于void*与void**的区别
由于void就是不检查数据类型,所以,对于编译器来说, void* 和 void** ,甚至后面n个 * ,都是一样的.问题的关键在于,让我们这些编程的人可以区分.原则上,void* 可以是一个一级指针,二级指针,甚至是n级指针.但我们的使用习惯是, 一个 * 代表一级指针,多级指针就用n个*表示. 在实际使用的时候, 如果告诉你, void* 是一个n级转载 2016-12-01 14:56:29 · 2149 阅读 · 0 评论