![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
lollipop_jin
这个作者很懒,什么都没留下…
展开
-
省略符形参
在c++ primer书上看到标题为“含有可变形参的函数”的章节,内容如下: 省略符形参有下列两种形式: void foo ( parm_list , ...); void foo ( ... ); 第一种形式为特定数目的形参提供了声明。在这种情况下,当函数被调用时,对于与显示声明的形参相对应的实参进行类型检查,而对于与省略符对应的实参则暂停类型检查。在第一钟形式中,转载 2012-07-04 10:40:32 · 4488 阅读 · 1 评论 -
C++中的多态性
c++中的多态性可以有两种表现形式:面向对象编程中的多态性:(继承关系中的多态性)在继承关系中的基类中指定某函数为虚函数(virtual),接着在函数调用中使用基类的引用或者指针作为形参,如果在调用该函数时,实参是继承类的对象,那么我们调用继承类中该虚函数的实现;如果实参是基类的对象,那么我们调用的是基类中该虚函数的实现。这也称为动态绑定。泛型编程中的多态性:使用模板我们可以让一个类或原创 2012-09-06 14:39:01 · 462 阅读 · 0 评论 -
c++转义字符
c++中有很多转义字符:\b表示的是回退,比如cout\r表示的是回车,它是将光标移动到该行的罪前面。这要追溯到打字机时代,那个时候打字机要跳转到下一行,必须先返回到该行的头部,然后将纸张上推一行,所以\r回车还是沿用了之前的定义,直接将光标移动到该行的头部。原创 2012-09-10 11:16:17 · 1628 阅读 · 0 评论 -
打印双字节型慎用wcout
Windows下在涉及到双字节型的输出问题上慎用wcout,特别是在codeblocks中和linux中使用的是gcc编译器的。我们一般可以使用c中的wprintf来打印双字节型,已在codeblocks中试验过,同时需要更改一个参数:setting——compiler and dubug—— other options,添加-finput-charset=GBK,之后在codeblocks中就可原创 2012-09-10 14:21:57 · 2157 阅读 · 0 评论 -
c 位域
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://yangwei.blogbus.com/logs/1550489.html位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位转载 2012-11-06 15:48:06 · 557 阅读 · 0 评论 -
Linux 标准IO带缓冲 ,read,write函数不带缓冲
在Linux中,函数open、read、write、lseek以及close提供了不带缓冲的I/Oint n =read(STDIN_FILENO,buf,BUFSIZE)但是标准IO函数提供了一种对不带缓冲I/O函数的带缓冲的接口:c=getc(stdin) #使用的是系统自身的缓冲空间原创 2012-11-07 16:40:34 · 1931 阅读 · 0 评论 -
float和double的精度以及在计算机中的表示
转自:http://hi.baidu.com/bebeq/item/8589e29b63dc9adb7b7f01a6float与double的范围和精度1 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位)8bits(指数位)转载 2012-11-07 19:09:53 · 9460 阅读 · 1 评论 -
c++ extern 攻略
当你想在另外的模块中(b)使用本模块(a)定义的全局变量,你应该想到extern关键字:在本模块的头文件中加上如下语句: extern int c;(定义仍然在模块a的.cpp文件中不变),然后在b模块中加上include "a.h"或者是 你在b模块中也加上extern int c;语句,这样的话在b模块中找不到的定义,自然会去其他的模块中查找定义。1 基本解释:extern可以转载 2012-12-17 19:56:31 · 594 阅读 · 0 评论 -
C和C++中存储区域详解(栈、堆、全局...)
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放转载 2012-12-18 14:48:32 · 7697 阅读 · 0 评论 -
c++类大小(涵盖继承 虚继承 虚函数表)
涉及到c++中求类大小时需要特别注意一下几点1.为类的非静态成员数据的类型大小之和.2.有编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针、虚继承、多重继承).3.为了优化存取效率,进行的边缘调整.4. 与类中的构造函数,析构函数以及其他的成员函数无关. 5. 私有继承,会去继承之前的私有成员变量么? 会...在内存中仍然分配原创 2013-01-01 12:37:02 · 3245 阅读 · 3 评论 -
linux 对目录读权限和执行权限的区别
在linux中,对目录的读权限和执行权限的意义是不同的。读权限允许我们读目录,获得在该目录中所有文件名的列表。当一个目录是我们要访问的文件的路径名中的一个组成部分时,对该目录的执行权限允许我们搜索该目录,寻找一个特定的文件名。原创 2012-12-19 09:55:42 · 861 阅读 · 0 评论 -
C++ 虚函数 虚继承 纯虚函数 之 一二三
虚函数是为了实现多态性:允许使用统一的接口去访问不同子类的函数。class A{ public: A(){} virtual void print() { cout<<"I am A"<<endl; }};class B:public A{ public:原创 2013-01-03 12:59:02 · 2756 阅读 · 0 评论 -
C++四种强制类型转换
TYPE b = (TYPE)a C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。 reinterpreter转载 2013-01-03 16:04:28 · 847 阅读 · 0 评论 -
auto_ptr、shared_ptr、weak_ptr、scoped_ptr用法小结
auto_ptr auto_ptr是现在标准库里面一个轻量级的智能指针的实现,存在于头文件 memory中,之所以说它是轻量级,是因为它只有一个成员变量(拥有对象的指针),相关的调用开销也非常小。 下面的代码来自于VC++ 8.0里面的源码: 里面有个auto_ptr_ref的数据结构,我们可以把它忽略,这个只是内部使用的代理结构,用于一些隐式的const变化转载 2013-01-14 09:05:10 · 14090 阅读 · 0 评论 -
类声明和定义中const、inline、默认参数、explicit、static、virtual的出现频率
在类申明中,在形参表之后添加关键字const,使成员函数变成常量(我们可以理解为将this指定指定为常量),如此便不能通过成员函数来修改对象的数据成员,无论是共有的还是私有的。例如double avg_price() const;该函数avg_price()不能更改对象的任何数据成员。需要强调一点的是:const关键字必须同时出现在类的申明和定义中,若只出现一次,将会报错。如果类的成员函数带有原创 2012-09-02 20:42:39 · 2930 阅读 · 0 评论 -
类类型转换
类类型转换操作符是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换函数采用如下形式:operator type();比如我们希望将我们编写的类型转换成int型,可以定义如下成员函数operator int();比较奇怪的是转换函数没有返回类型,但是它又确确实实会返回一个int型的数值。这是定义的显示的类型转换,可以回忆一下之前提到过的类型的隐式转换。原创 2012-09-04 21:15:27 · 509 阅读 · 0 评论 -
c++默认实参
转自:http://blog.csdn.net/chollima/article/details/3454839最近在看关于函数的一部分,其中有这两句话很吸引我,一是:既可以在函数声明中也可以在函数定义中指定默认实参,但是在一个文件中,只能为一个形参指定默认实参一次;二是:如果在函数定义的形参表中提供默认实参,那么只有在包含该函数定义的源文件中调用该函数时,默认实参才是有效的。细细一想才明转载 2012-07-04 15:20:52 · 4612 阅读 · 0 评论 -
重载和const形参
仅当形参是引用或者指针的时候,形参是否为const才能有影响例如: Record lookup ( Phone);Record lookup ( const Phone); 这里是对同一个函数的两次申明,而不是函数重载,因为形参不是引用也不是指针,仅仅差别是const,相当于这个const在这里起不到任何作用但是 Record lookup(Account &);Record原创 2012-07-04 17:44:24 · 799 阅读 · 0 评论 -
输出缓冲区的管理
缓冲区类型有三种:全缓冲(比如说文件),行缓冲(比如说终端),无缓冲 (比如说cerr)下面几种情况将导致缓冲区的内容被刷新,写入到真实的输出设备或者文件中去(1)程序正常结束。作为main返回工作的一部分,将清空所有输出缓冲区。(2)在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。(3)用操纵符显示地刷新缓冲区,例如行结束符endl(4)在每原创 2012-07-05 10:02:45 · 573 阅读 · 0 评论 -
c++primer之sizeof
使用sizeof的结果部分地依赖所涉及的类型:对char类型或值为char 类型的表达式做sizeof操作保证得到1对引用类型做sizeof操作将返回存放此引用类型对象所需要的内存空间的大小。也就是被引用的对象占用对少内存,引用就占用多少内存对指针做sizeof操作将返回存放指针所需要的内存大小,如果需要获取该指针所指向的对象的大小,则必须对该指针进行解引用。对数组做sizeof操转载 2012-07-03 17:00:50 · 717 阅读 · 0 评论 -
vector的容量进行缩减
在c++primer 上看到vectors的容量不会进行缩减:即便是删除元素,其references、pointers、iterators也会继续有效,继续指向动作发生前的位置。但是安插操作可能使这些references、pointers、iterators失效(因为安插可能导致内存的重新分配)。有一个间接缩减vector容量的小窍门:采用swap让两个同期交换内容后,两者的容量也会互换:原创 2012-07-07 20:25:20 · 2521 阅读 · 0 评论 -
const 引用——c++ primer 学习笔记
1.概念:const 引用指的是指向const对象的引用。2.const引用的右值可以是常数,但是普通的引用是不行的。 int &re1 = 42(x)const int &re2 = 42 (正确)3.先看一个可行的语句:double dval = 3.14; double dval = 3.14;const int &原创 2012-06-27 11:07:42 · 416 阅读 · 0 评论 -
STL的逆向迭代器
本文转自:http://zhouruijun163.blog.163.com/blog/static/10771562008111103635444/ 在学习STL中关于迭代器reverse_iterator转换,发现个有趣的问题,如下例子。#include iostream>#include algorithm>#include vector>转载 2012-07-09 15:43:06 · 1870 阅读 · 0 评论 -
数据结构 —— 堆(摘自严蔚敏《数据结构》)
堆是一颗完全二叉树,并且是完全二叉树中所有非终端节点的值均不大于(或不小于)其左、右孩子节点的值。堆的性质: 第一个元素总是最大或者最小 可以在对数时间内增加或者删除一个元素若在输出堆顶元素之后,使得剩余的n-1个元素的序列又重新建成一个堆,则得到n个元素中的次小值。如此反复,边能得到一个有序序列,这个过程称之为堆排序。实现堆排序需要解决两个问题:(1)如何由一个无序序列建成一个翻译 2012-07-10 16:23:15 · 1722 阅读 · 0 评论 -
c++ struct和class的区别
在c++中用class和struct关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员是public的,但是class的成员是private的。原创 2012-06-27 14:27:37 · 633 阅读 · 0 评论 -
计算下一个全排列(以STL中的next_permutation为例)
算法理解:(怎么样获得下一个全排列次序)根据标记从后往前比较相邻两数据,若前者小于(默认为小于)后者,标志前者为X1(位置PX)表示将被替换,再次重后往前搜索第一个不小于X1的数据,标记为X2。交换X1,X2,然后把[PX+1,last)标记范围置逆。完成。int main(){int a[] = {3,1,2};do{ cout }while (next_转载 2012-07-10 10:54:21 · 790 阅读 · 0 评论 -
在编写构造函数时建议使用构造函数初始化列表
c++中构造函数初始化式有两种方式:使用构造函数初始化列表进行初始化 省略初始化列表并在构造函数体内对数据成员进行赋值达到初始化的目的除了两个例外,对非类类型的数据成员进行赋值或者使用初始化列表进行初始化在性能和结果上都是等价的。例如:class ConstRef{public : ConstRef(int ii);private : int i;原创 2012-07-11 16:05:30 · 480 阅读 · 0 评论 -
隐式类类型转换以及explicit
先有如下构造函数版本:class Sales_item{public:Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}Sales_item(std::istream &is);}原本的成员函数same_isbn()接收一个Sales_item对象作为实参,判断两个对象是否原创 2012-09-03 09:08:54 · 446 阅读 · 0 评论 -
类中的可变数据成员(mutable)
从前面我们知道,在const成员函数内,我们不能对对象的数据(无论是公有的还是私有的)进行修改。但是我们又想去修改其中的一个数据。一种可行的方案是将该数据成员定义成可变数据成员(使用关键字mutable)看如下的例子:class Screen{public: private: mutable size_t access_ctr; };void Screen::do_disp原创 2012-09-02 21:11:55 · 1110 阅读 · 0 评论 -
C++ 编写自己的异常处理
摘要:如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下。 我们的异常处理类的features 如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下。 一个相对完善的异常处理类(以及附加的一些东西)应该能够处理下面的一些功能: 1) 能够方便的定义异常类转载 2013-03-04 17:28:18 · 1128 阅读 · 0 评论