C++ Primer Plus 6th 读书笔记 - 第6章 分支语句和逻辑运算符

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时与原先造成冲突。

 

 

 

你可能感兴趣的:(C++ Primer Plus)