05 2014 档案
摘要:指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化。 ★ 相同点: 1. 都是地址的概念; 指针指向一块内存...
阅读全文
摘要:嵌套类局部类《c++ primer 3th》C++嵌套类1、嵌套类的名字只在外围类可见。2、类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员。嵌套类可以访问外围类的成员(通过对象、指针或者引用)。3、一个好的嵌套类设计:嵌套类应该设成私有。嵌套类的成员和方法可以设为pub...
阅读全文
摘要:Screen.h#ifndef SCREEN_H#define SCREEN_H#include class Screen {public: typedef std::string::size_type pos; // Action is a type that can point to...
阅读全文
摘要:C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。 刚遇到这种语法时也许会让你止步不前。但你会发现,使用恰当的类型定义之后,复杂的语法是可以...
阅读全文
摘要:在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++...
阅读全文
摘要:#include using std::bad_cast;#include using std::cout; using std::endl;struct A { virtual ~A() { } };struct B : virtual public A { /* . . . */ };struc...
阅读全文
摘要:dynamic_cast (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。与static...
阅读全文
摘要:一、继承的构造函数在C++11新标准中,派生类能够重用其直接基类的构造函数。尽管如我们所知,这些构造函数并非以常规的方式继承而来,但是为了方便,我们不妨姑且称其为“继承”的。一个类只初始化它的直接基类,出于同样的原因,一个类也只继承其直接基类的构造函数。类不能继承默认、拷贝和移动构造函数。如果派生类...
阅读全文
摘要:我们可以调用std下的swap函数,这是一个模板函数:既可以: int a = 1; int b = 2; std::swap(a,b); coutp->getVal(); } void swap(Test& other) { using st...
阅读全文
摘要:布隆过滤器 假如有1亿个不重复的正整数(大致范围已知),但是只有1G的内存可用,如何判断该范围内的某个数是否出现在这1亿个数中?最常用的处理办法是利用位图,1*108/1024*1024*8=11.9,也只需要申请12M的内存。但是如果是1亿个邮件地址,如何确定某个邮件地址是否在这1亿个地址中...
阅读全文
摘要:C++0x引入了新的关键字decltype,它是一个操作符,用来取得表达式的类型,主要在泛型编程中使用。这里,简单介绍一下语法规则。语法形式:decltype (expression)其中,这里的括号必不可少(这点不同于sizeof操作符)。decltype(e)可看到是一个类型别名,并且不会对表达...
阅读全文
摘要:decltype类型指示符有时候遇到这种情况:希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。为了满足这一要求,C++11新标准引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的...
阅读全文
摘要:“overload”翻译过来就是:超载,过载,重载,超出标准负荷;“override”翻译过来是:重置,覆盖,使原来的失去效果。先来说说重载的含义,在日常生活中我们经常要清洗一些东西,比如洗车、洗衣服。尽管我们说话的时候并没有明确地说用洗车的方式来洗车,或者用洗衣服 的方式来洗一件衣服,但是谁也不会...
阅读全文
摘要:这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 覆盖(也叫重写)是指在派生类中重新对基类中...
阅读全文
摘要:C++的那些事:类的拷贝控制1,什么是类的拷贝控制当我们定义一个类的时候,为了让我们定义的类类型像内置类型(char,int,double等)一样好用,我们通常需要考下面几件事:Q1:用这个类的对象去初始化另一个同类型的对象。Q2:将这个类的对象赋值给另一个同类型的对象。Q3:让这个类的对象有生命周...
阅读全文
摘要:本文中的过程演示如何使用 lambda 表达式。有关 lambda 表达式的概述,请参见C++ 中的 Lambda 表达式。有关 lambda 表达式结构的更多信息,请参见Lambda 表达式语法。在本文声明 Lambda 表达式调用 Lambda 表达式嵌套 Lambda 表达式高阶 Lambda...
阅读全文
摘要:本主题介绍 lambda 表达式的语法。它演示提供 lambda 表达式的结构元素的示例,这些元素与示例。Lambda 表达式语法下面用于定义显示语法,ISO C++11 从标准,lambda 表达式(项标记下标选择是可选的):lambda-introducer lambda-declarator选...
阅读全文
摘要:先弄清几个概念,什么叫一元函数,二元函数1.一元函数一个参数2.二元函数 两个参数3. 一元谓词 一个参数,返回类型为bool型4. 二元谓词 两个参数,返回类型为bool型函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征。因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或...
阅读全文
摘要:linux iSCSI target配置全过程一:Install iSCSI target for Linux1,操作系统:[root@rac2 ~]# cat /etc/issueEnterprise Linux Enterprise Linux AS release 4 (October Upd...
阅读全文
摘要:IOzone是一个文件系统测试基准工具。可以测试不同的操作系统中文件系统的读写性能。可以通过 write, re-write, read, re-read, random read, random write, random mix, backwards read, record rewirte, ...
阅读全文
摘要:对于&限定的函数,我们只能将它用于左值;对于&&限定的函数,只能用于右值;如下:Foo &retFoo(); //返回一个引用;retFoo 调用是一个左值Foo retVal(); //返回一个值;retVal 调用是一个右值Foo i,j; // i和j是左值i=...
阅读全文
摘要:1,fdisk -lfdisk -l 只能列出硬盘的分区表、容量大小以及分区类型,但看不到文件系统类型。2,df -hdf 命令是用来查看文件系统磁盘空间使用量的。但df 命令只会列出已挂载的文件系统信息,对于没有挂载的文件系统是查看不到的。使用这个命令可以很方便的查看已挂载的文件系统的空间使用量、...
阅读全文
摘要:对国产机进行测试1.win7上安装测试下载:点击打开链接双击安装即可。2.ubuntu下配置:OS: Ubuntu 12.04LTS x86_64Kernel: 3.5.0-26-generic下载:点击打开链接编译安装unzip iometer-2006_07_27.common-src.zip\...
阅读全文
摘要:struct dx_rootHtree的内部节点:struct dx_nodeHtree树根和节点中都存在的Hash map:struct dx_entry1.20扩展属性EA扩展属性(xattrs)通常存储在磁盘上的一个单独的数据块中,通过inode.i_file_acl*引用。扩展属性的第一应用...
阅读全文
摘要:接着上一篇博文,继续分析Ext4磁盘布局中的元数据。1.7超级块超级块记录整个文件系统的大量信息,如数据块个数、inode个数、支持的特性、管理信息,等待。如果设置sparse_super特性标志,超级块和块组描述符表的冗余备份仅存放在编号为0或3、5、7的幂次方的块组中。如果未设置sparse_s...
阅读全文
摘要:本文描述Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3和Ext2文件系统,除了它们不支持的Ext4的特性外。整个分析分两篇博文,分别概述布局和详细介绍各个布局的数据结构及组织寻址方式等。感兴趣的看官敬请留意和指导!1. Ext4文件系统布局综述一个Ext4文件系统被分成一系列块组。为...
阅读全文
摘要:所有容器提供的都是“value语意”而非“reference语意”。容器内进行元素的安插操作时,内部实施的是拷贝操作,置于容器内。因此STL容器 的每一个元素都必须能够拷贝。---> 侯捷、孟岩译 p144页原文以vector为例,往Vector中(实际上所有STL容器都是这样)放元素,Vector...
阅读全文
摘要:在C语言中,我们常常会提起左值(lvalue)、右值(rvalue)这样的称呼。而在编译程序时,编译器有时也会在报出的错误信息中会包含 左值、右值的说法。不过左值、右值通常不是通过一个严谨的定义而为人所知的,大多数时候左右值的定义与其判别方法是一体的。一个最为典型的判别方法就是, 在赋值表达式中,出...
阅读全文
摘要:C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在...
阅读全文
摘要:我也不知道为什么作者给这个条款起这样的名字,因为这样看上去重点是在“不抛出异常”,但事实上作者只是在全文最后一段说了一下不抛异常的原因,大部分段落是在介绍怎样写一个节省资源的swap函数。你可以试一下,只要包含了头文件iostream,就可以使用swap函数,比如:1 #include 2 3 in...
阅读全文
摘要:std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如:int main(int argc, _TCHAR* argv[]) { int a[10] = {1,2,3,4,5,6,7,8,...
阅读全文
摘要:#include #include using namespace std;class Obj{public: Obj(void){cout obj(10); vector obj2(10,0); return 0;}结果如下://执行了构造函数2次,20次复制构造函数,析构函数22次//我想提出的...
阅读全文
摘要:构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即:A(void) //默认无参数构造函数A(const A &a) ...
阅读全文
摘要:直接初始化和拷贝初始化如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化。当初始值只有一个时,使用直接初始化或拷贝初始化都行。如果用多个值进行初始化的情况,非要用拷贝初始化的方式处理也不是不可以,...
阅读全文
摘要:#include#include#include#include#includeusing namespace std;map buildMap(ifstream &map_file);const string &transform(const string &s,const map &m);voi...
阅读全文
摘要:C++面试题:list和vector有什么区别?考点:理解list和vector的区别出现频率:★★★★解析:vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取(即使用[]操作符访问其中的元素),但由于它的内存空间是连续的,所以在中间进行插入和删除会造成...
阅读全文
摘要:迭代器类别输入迭代器输入迭代器:可以读取序列中的元素。一个输入迭代器必须支持用于比较两个迭代器的相等和不相等运算符(==、!=)用于推进迭代器的前置和后置递增运算(++)用于读取元素的解引用运算符(*);解引用只会出现在赋值运算符的右侧箭头运算符(->),等价于(*it).member,即,解引用迭...
阅读全文