Chapter5 (语句) --C++Prime笔记
1.指用是一个只含有一个单独的分号的语句。
什么时候用到:语法上需要一条语句但是逻辑上不需要。
2.复合语句是指用花括号括起来的语句和声明的序列,又被称为块。
3.悬垂else :规定else与离它最近的尚未匹配的if匹配。
4.case语句分支最后的break一般不要省略。如果没写break语句,最好加一段注释说明清楚程序的逻辑。
5.在switch下的case条件语句定义一个default是很有必要的,即使不准备再此标签下做任何工作,这样的目的是告诉程序的读者,我们已经考虑到了默认的情况,只是什么都没有做。
6.case语句的标签一定是常量表达式。
7.for循环的()中的第一个位置可以定义多个对象,但是只能有一条声明语句,因此其中定义所有变量的类型需要相同。
8.范围for语句(for(auto &r :v))
作用:历遍容器或者其他序列的所有元素
适用对象:能返回迭代器的begin和end成员
原理:每次迭代都会重新定义循环控制变量,并将其初始化为序列中的下一个值,然后执行语句。
注意点:
如果要修改序列中的元素,循环变量必须声明为引用类型。
再范围for中预存了end()的值,因此一旦再序列中添加(删除)元素,end函数的值就可能变得无效。
9.do
statement
while(codition);
①do while语句不管条件如何,我们都至少执行一次循环
②do while语句应该再括号包围起来的条件后面用一个分号表示语句结束
③condition不能为空,condition定义的变量必须定义再循环体之外。
如果允许再条件部分定义变量,则变量的使用出现再定义之前,这显然是不合理的。
例子:
do{
//
mumble(foo);
}while(int foo = get_foo()); //错误
10.continue只有再switch嵌套在迭代语句内部的时候,才能在switch里使用.
11.goto语句:goto label
①标签符独立于变量或者其他标示符名字,因此,标签表示符可以和程序中的其他实体的标示符使用同一个名字而不互相干扰。
②goto语句和控制权转向的那条标签的语句必须位于同一个函数之内。
12.try语句块:
while(cin >> item1 >> item2)
{
try
{
//执行添加两个Sales_item对象的代码
//如果添加失败,代码抛出一个runtime_error异常
}
catch(runtime_error)
{
cout << err.what()
<< "\nTry Again? Enter y or n" << endl;
char c;
cin >> c;
if(!cin || c == 'n')
break;//跳出while循环
}
}
1
while(cin >> item1 >> item2)
2
{
3
try
4
{
5
//执行添加两个Sales_item对象的代码
6
//如果添加失败,代码抛出一个runtime_error异常
7
}
8
catch(runtime_error)
9
{
10
cout << err.what()
11
<< "\nTry Again? Enter y or n" << endl;
12
char c;
13
cin >> c;
14
if(!cin || c == 'n')
15
break;//跳出while循环
16
}
17
}
①catch一旦完成,程序跳转到try语句块最后一个catch子句之后的那条语句继续执行。
②try语句块内声明的变量在块外部无法访问,特别是在catch子句内也无法访问。