c++
rock_joker
这个作者很懒,什么都没留下…
展开
-
看完这个你还不理解右值引用和移动构造 你就可以来咬我(上)
共分三篇,这是第一篇。另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(中),看完这个你还不理解右值引用和移动构造 你就可以来咬我(下)。C++ 右值引用 & 新特性C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分转载 2017-03-08 21:09:59 · 892 阅读 · 0 评论 -
理解虚拟函数、多继承、虚继承和RTTI所需的代价
C++编译器们必须实现语言的每一个特性。这些实现的细节当然是由编译器来决定的,并且不同的编译器有不同的方法实现语言的特性。在多数情况下,你不用关心这些事情。然而有些特性的实现对对象大小和其成员函数执行速度有很大的影响,所以对于这些特性有一个基本的了解,知道编译器可能在背后做了些什么,就显得很重要。这种特性中最重要的例子是虚拟函数。当调用一个虚拟函数时,被执行的代码必须与调用函数的对象的动态转载 2017-06-12 17:49:40 · 350 阅读 · 0 评论 -
关于C++中的虚拟继承的一些总结
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public virtual A;class B2:public virtual A;转载 2017-06-18 21:57:13 · 187 阅读 · 0 评论 -
Linux下core文件调试方法
Linux下core文件调试方法在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 (2)转载 2017-06-16 11:56:03 · 257 阅读 · 0 评论 -
什么时候要用虚析构函数?
什么时候要用虚析构函数?通过基类的指针来删除派生类的对象时,基类的析构函数应该是虚的。否则其删除效果将无法实现。一般情况下,这样的删除只能够删除基类对象,而不能删除子类对象,形成了删除一半形象,从而千万内存泄漏。原因:在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员。如果想要用基类对非继承成员进行操作,则要把基类的这个操作(函数)定义为虚函数。那么,转载 2017-05-27 13:20:13 · 1938 阅读 · 1 评论 -
关于基类和派生类的构造函数和析构函数的执行顺序问题
C++ 派生类的析构函数的调用顺序为:A) 基类、派生类和对象成员类的析构函数 B) 派生类、对象成员类和基类的析构函数 C) 对象成员类、派生类和基类的析构函数 D) 派生类、基类和对象成员类的析构函数答案是选着B,关于派生类构造函数与基类构造函数的调用顺序问题,我们先看一下书上的说法: 《面向对象程序设计基础(第二版》李师贤等,第254页转载 2017-05-27 12:59:53 · 672 阅读 · 0 评论 -
运算符重载参数的顺序对运算是否有影响
自己脑洞了一道面试题函数的特征标有没有顺序关系?答案是有的!请看下面这个例子://declarationfriend String & operator+(const char * schar, String & st);//definationString & operator+(const char * schar, String & st){转载 2017-05-25 11:39:43 · 2372 阅读 · 1 评论 -
operator 类型转换及重载
一、类型转换类型转换函数的一般形式为 :operator 类型名(){实现转换的语句}在函数名前面不能指定函数类型,函数没有参数. 如:Complex::operator double(){return m_dReal;}int main(){Complex obj(3,4);double dNum = 0.0转载 2017-03-31 18:40:32 · 860 阅读 · 0 评论 -
移动构造函数和移动赋值运算符
如果第二个对象是在复制或赋值结束后被销毁的临时对象,则调用移动构造函数和移动赋值运算符,这样的好处是避免深度复制,提高效率。为了直观地观察移动构造函数和移动赋值运算符的运行方式,编写一个类Pointer,该类的对象会在堆动态创建一个数组。代码如下:[cpp] view plain copyclass Pointer { pub转载 2017-03-13 19:50:55 · 348 阅读 · 0 评论 -
使用sizeof计算类的大小
使用sizeof计算类的大小类的sizeof大小一般是类中的所有成员的sizeof大小之和,这个就不用多说。总结1. 一个对象的大小大于等于所有非静态成员大小的总和。 2.C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。3.如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在转载 2017-03-29 21:40:27 · 328 阅读 · 0 评论 -
求助,C++中为什么有些函数只能用成员函数重载,而有些函数则只能用友元函数重载,其本质原因是什么?
操作符重载函数,仍然是一个成员函数。和普通的成员函数调用一样。我们知道,类的成员函数必须通过对象才可以调用,比如“[ ]” 运算符。 class test{public: int operator[](int pos);}; 要调用 [] 运算符重载成员函数,必须有一个test的对象,否则无法调用。所以它必须是成员函数。有一些运算符即可以友元,也可以用成员函数,比如 "+"。class te原创 2017-03-27 20:56:50 · 3637 阅读 · 0 评论 -
Const 重载解析(const参数重载 和 const成员函数重载)
书上和网上在很多地方都对const 的重载做了一些解释,但感觉都不是很详细。还有很多同学在不同的地方发问关于const 重载的问题,这里我又重新看了一下,做了一个简单的分析也可能有不对的地方,欢迎讨论。所谓重载,是指允许存在多个同名函数,而这些函数的参数表不同,即函数名相同但函数的签名不同。重载并不是面向对象编程的特有属性,这是因为重载是在编译阶段实现的,编译器根据函数不同的参数表,对同名函数转载 2017-03-27 20:47:49 · 402 阅读 · 0 评论 -
静态变量,全局变量,局部变量的区别
1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。2>静态局部变量具有局部作用域,转载 2017-03-27 20:30:16 · 809 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2017-03-19 19:25:54 · 193 阅读 · 0 评论 -
移动构造函数和移动赋值运算符
如果第二个对象是在复制或赋值结束后被销毁的临时对象,则调用移动构造函数和移动赋值运算符,这样的好处是避免深度复制,提高效率。为了直观地观察移动构造函数和移动赋值运算符的运行方式,编写一个类Pointer,该类的对象会在堆动态创建一个数组。代码如下:[cpp] view plain copyclass Pointer { pub转载 2017-03-08 21:22:05 · 567 阅读 · 0 评论 -
看完这个你还不理解右值引用和移动构造 你就可以来咬我(下)
共分三篇,这是第一篇。另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(上),看完这个你还不理解右值引用和移动构造 你就可以来咬我(中)。下面是新标准下的其他特性(共十点),了解一下,总有用上的时候。转载 ::http://blog.csdn.net/yapian8/article/details/42341351C++11 新特性分析转载 2017-03-08 21:15:43 · 498 阅读 · 0 评论 -
看完这个你还不理解右值引用和移动构造 你就可以来咬我(中)
共分三篇,这是第一篇。另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(上),看完这个你还不理解右值引用和移动构造 你就可以来咬我(下)。看完上篇,应该对右值引用和移动构造有了总体上的概念,下面是一篇更加形象更加详细的论述。看完之后,相信你一定会对这个问题产生深入的理解和自己的认识。另一个版本的右值引用叙述右值引用解决的转载 2017-03-08 21:14:25 · 540 阅读 · 0 评论 -
C++11:使用 auto/decltype/result_of使代码可读易维护
C++11 终于加入了自动类型推导。以前,我们不得不使用Boost的相关组件来实现,现在,我们可以使用“原生态”的自动类型推导了!C++引入自动的类型推导,并不是在向动态语言(强类型语言又称静态类型语言,是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java;弱类型语言又称动态类型语言,是指不需要进行变量/对象类型声明的语言,一般情况下不需要编译(但也有编译型的)。...转载 2018-05-14 15:06:45 · 1179 阅读 · 1 评论