1. cin读取错误时对换行符的处理
1 #include <iostream> 2 3 using namespace std; 4 5 int main() { 6 double d; 7 char c; 8 cin >> d; 9 if(!cin) { 10 cout << "x" << endl; 11 cin.clear(); 12 cout << cin.get() << endl; 13 } 14 // cin.get(); 15 cin.get(c); 16 }
以上代码输入分为2种情况:
若输入为double类型,则cin.get(c)会读取换行符,程序运行结束。
若输入为非double类型,如char类型,则cin会置错误位,保留错误输入的同时丢弃回车符(现象如此,原因猜测),所以程序在运行到cin.get(c)时候会停止等待输入。
奇怪,又测试了几次,感觉和之前一样,程序运行结束。
2. const指针分析
在二级间接关系时,将const指针和非const指针混合的指针赋值方式将不再安全。
1 const int **pp2; 2 int *p1; 3 const int n = 13; 4 pp2 = &p1; // not allowed 5 *pp2 = &n; // valid 6 *p1 = 10; // valid
pp2是一个指针,他指向另一个指针的地址,而另一个指针是指向一个int变量的地址。
pp2指针本身非const,所以可以指向一个指针地址,即&p1。但在实际编程中,语句4语法检查错误,原因是p1指向的是非const的int,而要求是const int。
假如语句4运行成功,则*pp2为指向一个const int的指针,赋值成功,即 p1 = &n,但实际情况下非const指针不能指向const变量,故运行*p1 = 10时与原先造成冲突。