
C/C++
文章平均质量分 82
lirunfa
这个作者很懒,什么都没留下…
展开
-
static_cast、dynamic_cast、reinterpret_cast、和const_cast
标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。 static_cast用法:static_cast ( expression_r_r )该运算符把expression_r_r转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要原创 2011-11-30 10:58:11 · 448 阅读 · 0 评论 -
结构体的内存对齐
原则一:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。原则二:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。原创 2012-09-28 21:55:40 · 699 阅读 · 0 评论 -
C++中的重载、覆盖和隐藏
重载:函数被重载是发生在同一个范围内的,例如一个类中的两个成员函数,函数名相同,但是参数不同,与virtual关键字无关系。class A{ void f();//3个f互为重载函数 void f(int); void f(int,float);}覆盖:函数覆盖发生在不同的范围类,例如位于派生类与基类中的两个函数,函数名相同,参数也相同,而且基类函数必须要有virtual原创 2012-02-19 14:29:51 · 501 阅读 · 0 评论 -
C++代码优化(2)函数设计与返回值优化
最近在看《提高C++性能的编程技术》,看到返回值优化这一章的时候顺便温习一下《高质量C++编程指南》相应的章节。(1)函数设计 1、参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void填充。void SetValue(int width, int height); // 良好的风格void SetValue(int, int);原创 2012-02-24 13:12:03 · 1621 阅读 · 0 评论 -
C++代码优化(1)
经常能看到论坛上讨论C++好还是JAVA好,哪个效率高等等,其实作为编程语言,它们必有自己存在的价值,在某一领域发挥着它们的作用。可以说一个C++菜鸟写出来的程序的性能肯定没有一个JAVA老手写出来的程序的性能好,可见程序性能的好坏是要看程序员的功力。最近在看《提高C++性能的编程技术》,边看边把一些有用的技巧整理一下写到博客上。(1)缓式构造 往往性能的优化经常需要原创 2012-02-23 12:25:52 · 707 阅读 · 0 评论 -
虚函数表指针,虚函数表
虚函数表对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要转载 2012-02-15 12:04:39 · 2177 阅读 · 0 评论 -
拷贝/复制构造函数
拷贝构造函数将会被调用。1).一个对象以值传递的方式传入函数体2).一个对象以值传递的方式从函数返回3).一个对象需要通过另外一个对象进行初始化例子如下Point:: Point (const Point &);默认的拷贝构造函数一般可以解决很多情况,但是如果要拷贝的对象里面有指针,指向一块内存,拷贝的对象的指针也指向这个地方,然后拷贝的对象析构的时候,会释原创 2011-11-24 14:12:40 · 504 阅读 · 0 评论 -
new 与 malloc 的区别
1. new/delete是c++的运算符, 而malloc/free是c语言的标准库函数,都可以用用来动态分配和释放内存。2. 对于用户自定义对象而已,malloc只是分配空间,而new却能调用调用对象的构造函数,在delete时候调用对象的析构函数。3. new可以认为是malloc加上构造函数的执行。new出来的指针式直接带类型信息的,而malloc返回的void*指针。4. n原创 2011-11-24 13:58:58 · 461 阅读 · 0 评论 -
JNI学习笔记(2)
JavaVM接口第一种方式,在加载动态链接库的时候,JVM会调用JNI_OnLoad(JavaVM* jvm, void* reserved)(如果定义了该函数)。第一个参数会传入JavaVM指针。一般都在这个时候保存一个static的JavaVM *jvm,这个jvm指针在进程内是可以放心共享的。第二种方式,在native code中调用JNI_CreateJavaVM(&jvm原创 2012-09-28 22:15:19 · 3175 阅读 · 1 评论