【深入C++】
Always__
这个作者很懒,什么都没留下…
展开
-
赋值运算符的返回值问题
最近看到C++的运算符重载,赋值运算符如=,+=,-=,.....,为什么operator=(),operator+=()...的返回值必须是对象的引用,书上说是保证这样的表达式赋值a=b=c,我把返回值改为按值返回,代码也能通过啊。今天在看剑指offer时突然被这个问题困惑,为此上网查查,特此记录一下。话不多说,先贴上代码CMystring& operator=(const原创 2016-01-18 10:11:10 · 6679 阅读 · 0 评论 -
reinterpret_cast类型转换运算符的理解
今天同学在群里发了一篇题,关于reinterpret_cast类型转换的,个人觉得有必要记录一下:题目代码如下:#include using namespace std;class A {public: virtual void func() { cout << "A::func" << endl; } virtual void funcA() { cout << "原创 2016-04-28 18:39:09 · 995 阅读 · 0 评论 -
【剑指offer】旋转数组的最小值
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。输入描述一个非递减序列的一个旋转数组输出描述输出旋转数组的最小元素题目分析 原数组最小的值必然是第一个,旋转后数组是原创 2016-05-09 11:00:11 · 898 阅读 · 0 评论 -
【c++】深度探索虚继承内存布局
C++中虚拟继承的概念为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。class 派生类名:virtual 继承方式 基类名virtual是关键字,声明该基类原创 2016-04-22 17:11:33 · 1923 阅读 · 0 评论 -
【STL】SGI STL私房菜:_type_traits
刚开始我们先了解一下全特化和偏特化的知识:模板有两种特化,偏特化和全特化。类模板有偏特化和全特化,而函数模板只有全特化。先看一下类模板:templateclass Test{public: Test(T1 i,T2 j):a(i),b(j){cout<<"模板类"<<endl;}private: T1 a; T2 b;};template<>class Test原创 2016-05-03 12:27:21 · 642 阅读 · 0 评论 -
【C++】强制类型转换运算符
C++有四种强制类型转换符,分别是dynamic_cast,const_cast,static_cast,reinterpret_cast。其中dynamic_cast与运行时类型转换密切相关,在这里我们先介绍dynamic_cast,其他三种在后面介绍。1、dynamic_cast运算符该转换符用于将一个指向派生类的基类指针或引用转换为派生类的指针或引用。转载 2016-04-17 09:38:55 · 576 阅读 · 0 评论 -
【C++】成员函数的重载,覆盖,隐藏
对于面向对象程序设计的三个特性:封装,继承,多态。封装:封装的目的主要是为了实现源代码的安全性。所以我们对其有访问控制。C++语言使用了三个明确的关键字来设置类中的边界:public,private,protected。继承的类可以访问protected成员,但是不能访问私有成员。继承:重用接口,如果一个类的功能不够强大,或者我们需要在这个类的中加上另外一些功能,我们就可以使用继承原创 2016-04-15 20:43:40 · 745 阅读 · 0 评论 -
C++标准异常类
C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下:namespace std { class exception { public: exception() throw(); //原创 2015-06-29 00:04:28 · 648 阅读 · 0 评论 -
【STL】空间配置器剖析(完结)
内存基本处理工具STL提供了五个全局函数用于处理空间,分别为:1. construct 用于构造;2. destroy 用于析构;3. uninitialized_copy(first, last, result) 将[first,last)范围内的对象复制到result处;4. uninitiated_fill(first, last, X) 将[first,last原创 2016-04-28 11:35:17 · 668 阅读 · 0 评论 -
【STL】空间配置器剖析(三)--内存池
内存池上篇文章的阅读量目前为止竟然高达4000+,让作者真是受宠若惊啊(呃呃呃。毕竟是一只菜鸟啊!)。正文开始咯:内存池上篇文章我们对于对对象构造前的内存配置和对象析构后的空间释放进行深入探索。详细介绍了空间配置器的,第一级空间配置器(malloc_alloc_template),第二级空间配置器(defalult_alloc_template).这篇文章将针对free原创 2016-04-28 09:55:53 · 1569 阅读 · 0 评论 -
【DS】数据结构--二叉树实现
最近开始复习数据结构,感觉脑子不好使,特此记录一下,以便日后查看,也希望能给大家一些帮助!类定义和一些函数接口:templatestruct BinaryTreeNode{ BinaryTreeNode(T data) :_data(data), _left(NULL), _right(NULL) {} BinaryTreeNode* _left;原创 2016-04-23 17:22:17 · 699 阅读 · 0 评论 -
【C++】迭代器的失效
迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::iterator)来查看,所占内存并不是4个字节。 首先对于vector而言,添加和删除操作可能使容器的部分或者全部迭代转载 2016-04-13 22:37:16 · 363 阅读 · 0 评论 -
【C语言】C语言的const与C++的const区别
1、C中CONST的使用。const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?问题1:const变量 和 常量?为什么我象下面的例子一转载 2016-04-09 11:07:19 · 534 阅读 · 0 评论 -
【STL】空间配置器剖析(二)
上篇文章主要对于对象的构造含和析构进行了主要说明,这篇文章将对对象构造前的内存配置和对象析构后的空间释放进行深入探索。好的,话不多说马上进入是正文:对对象构造前的内存配置和对象析构后的空间释放,由负责,SGI对此的设计哲学如下:向system heap要求空间。考虑多线程的状态考虑内存不足的应变措施考虑过多的“小型区块”可能造成的内存碎片问题C++的内存配置原创 2016-04-25 11:37:28 · 9395 阅读 · 0 评论 -
【STL】空间配置器剖析(一)
最近看了看侯捷的《STL源码剖析》,打算看完之后写写笔记,毕竟很多东西看起来看懂了,却并不一定能够将其描述清楚,说到底还是没有彻底弄明白,更主要是写给自己看的,记录一下,以便以后再看。本文主要讲下面先从一个简单的allocator源码看起:#ifndef _JJALLOC_#define _JJALLOC_ #include #include #include #inc原创 2016-04-23 12:04:58 · 919 阅读 · 0 评论 -
内存屏障解析
当你看到“内存屏障”四个字的时候,你的第一反应是什么?寄存器里取出了错误的值?ifence,sfence之类的指令?还是诸如volatile之类的关键字?好吧,我第一次看到这四个字的时候,脑子里浮现出的是魔兽争霸里绿油油的铺满苔藓的岩石屏障- -#,并且,当我搞明白内存屏障具体是什么,而且自认为对其很熟悉之后,我的第一反应依然是那几块绿油油的石头,而且很想上去A一把!言归正传,先解释下转载 2016-07-17 17:03:49 · 866 阅读 · 0 评论