C++ 学习笔记

1. cin.get() 函数读取所有的字符输入,包括空格和换行符,而cin>> 跳过空格和换行。当用户对程序提示作出响应时,必须在每行的最后按下ENTER键,以生成换行符。cin>>ch方法可以轻松的跳过这些换行符。

2.可以用两种不同的方式将const关键字用于指针。第一种方法是让指针指向一个常量对象,这样可以防止使用该指针来修改指向的向量;第二种方法是将指针申明为常量,这样可以防止改变指针指向的位置。

指向常量的指针:

int age = 39;
const int * pt =  &age;

这里申明一个指向常量的指针pt。pt指向一个const int,因此不能用pt来修改这个值。即*pt的值为const。但pt的声明并不意味着它指向的值实际上是一个常量,而只是意味着对pt而言,这个值是常量。例如pt指向age,而age不是const,可以直接通过age来修改age的值,但不能使用pt来修改。

*pt += 1    // invalid.
cin >> *pt  // invalid

*pt = 20    // invalid
age = 20    // valid

const float g_earth = 9.80;
const float * pe = &g_earth; // valid

const float g_moon = 1.63;
float * pm = &g_moon;         // invalid

第二个使用const的方式使得无法修改指针的值:

int sloth = 3;
const int * ps = &sloth;         // a pointer to const int 
int * const finger = &sloth;   // a const pointer to int 
最后一个声明中,这种格式是的finger只能指向sloth,但允许finger来修改sloth。中间的声明不允许使用ps来修改sloth的值,但允许将ps指向另一个位置。简而言之finger和*ps都是const,而*finger和ps不是。

double trouble = 2.0E30;
const double * const stick = &trouble;
stick只能指向trouble,而stick不能用来修改trouble的值。简而言之,stick和*stick都是const。
3.C-风格字符串与常规char数组之间的一个重要区别是,字符串有内置结束字符。这意味着不必将字符串长度作为参数传递给函数,而函数可以使用循环依次检查字符串总的每个字符,直到遇到 结尾的空值字符串为止。

vector::iterator 改变vector中的元素值,每种容器类型还定义了一种名为const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值。

	for(vector<string>::const_iterator iter = text.begin();
		iter != text.end();iter++)
	{
		cout << *iter << endl;               // ok
	}

	for(vector<string>::const_iterator iter = text.begin();
		iter != text.end();iter++)
	{
		*iter = " ";                         // error
	}

	const vector<string>::iterator cit = text.begin();
	*cit = "test";                               // ok
	++cit;                                       // error

const map

http://blog.csdn.net/laomai/article/details/5569627

void CPlayerScore::GetScore(GAMERESULT res, RBScore & rbscore)const 
{
      rbscore = m_scoreTable[res];
}


m_scoreTable是一个map成员,结果编译时报错。


error C2678: 二进制“[” : 没有找到接受“const std::map<_Kty,_Ty>”类型的左操作数的运算符(或没有可接受的转换)


解决办法有两个:


1、是去掉函数的const属性,但是这样就改变设计意义了


2、在声明m_scoreTable时加上mutable限定符,如下所示


mutable map<GAMERESULT, RBScore> m_scoreTable;


第2个办法是网友benbear告诉我的,又学到了一招,呵呵


3、不改变原来的声明


代码改为


     map<GAMERESULT, RBScore>:: const_ iterator it=m_score.find(res);


    assert(it !=m_score.end();


     rbscore = it->second;

因此直接对vector进行下表访问会出现不安全的情况,需要使用迭代器查找,然后进行访问。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值