现在的位置: 首页 > 综合 > 正文

学习C++笔记(引用、const、iterator)

2013年05月19日 ⁄ 综合 ⁄ 共 1465字 ⁄ 字号 评论关闭

1.const引用

1.1.非const引用,只能绑定到同类型对象;

1.2.const引用,咋可以绑定到不同但相关的类型的对象,或绑定到右值;

double a = 3.14;
const int &b = a; //right

2.const与iterator

 2.1. const_iterator: 只读容器内元素;

for(vector<string>::const_iterator iter = text.bgin(); iter != text.end(); ++iter)
cout<<*iter<<endl; //right
*iter=" "; //wrong

 2.2. const与iterator一起使用则是说明迭代器不能修改,但内容可以;

vector<int> num(10);
const vector<int>::iterator iter = num.begin();
*iter=1; //right
++iter;  //wrong

 

  2.3. 任何改变vector的操作都会使已有的迭代器失效,例如: push_back.

 

3.const与指针

 3.1指向const对象的指针

const double *cptr;
*cptr = 42; //error: 不能通过cptr修改其所指对象的值,但可可以使其指向另一个const对象
const double pi = 3.14;
double *ptr = pi // error:ptr是普通指针
const double *cptr = &pi //right: cptr是指向const对象的指针

不能使用void*指针保存const对象的地址,而必须使用const void*类型的指针保存const对象的地址

const int universe = 42;
const void *cpv = &universe: //right
void *pv = &universe;//wrong

允许把非const对象的地址赋给const对象的指针

double dval = 3.14;
cptr = &dval;//ok:但是任何通过cptr修改其值的行为,都会导致编译错误

可以将指向const的指针理解为“自以为指向const的指针

 3.2 const指针(本身不能修改)

int Num = 0; 
int *const Num_constp = &Num;//Num_constp是const指针

任何给const指针赋值(即使是相同值)的行为都会导致编译错误(与任何const量一样,const指针必须在定义时初始化):


 Num_constp;//error

指针所指向对象的值可以修改

*Num_constp = 0;//right;只要符合该对象的类型

3.3 指向const对象的const指针(都不许改)

const double pi = 3.14; 
const double *const pi_ptr = &pi

3.4 typedef和const指针

const pstring cstr;

cstr是什么类型呢?

const string *cstr;//wrong;因为const修饰的是一个类型; 
srting *const cstr;//right

难以理解是因为const限定符的位置既可以放在类型前也可以放在类型后;

string const s1; const string s2;//二者类型相同

对于typedef

string s; 
typedef string *pstring; 
//三种形式都代表指向string类型的const指针 
const pstring cstr1 = &s;
 pstring const cstr2 = &s;//容易理解 
string *const cstr3 = &s;

 

抱歉!评论已关闭.