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进行下表访问会出现不安全的情况,需要使用迭代器查找,然后进行访问。