保持快乐,善于表达,敢于创新

chapter5:statement

上一篇 / 下一篇  2011-09-09 17:38:06 / 个人分类:c++

1. swith:
1). 关键字switch 后面是一个要被计算的表达式, 表达式被放在括号中.switch 表达式可以是任意复杂的表达式,包括函数调用的返回值. 但必须是返回整形常量值。
2). 一组case 标签label, 它由关键字case后接一个常量表达式及其冒号构成. 注意关键字case 后面的值必须是一种整数类型的常量表达式,如char,emu,int
case 3.14: // 非整数 非法的case 标签值
case ival: // 非常量 非法的case 标签值

3). 把一条声明语句放在与case 或default 相关联的语句中是非法的,除非它被放在一个语句块中.如下:
case illegal_definition:
string file_name = get_file_name();// 错误: 声明语句必须被放在语句块中
// ...
break;

改成如下:
case illegal_definition:
{
string file_name = get_file_name();
// ...
break;
}
4).
case 'a': case 'e':case 'i: case 'o': case 'u':
++vowelCnt;
break;
5). case后面的标签不能有重复。
6). 常见错误:
int ival=512 jval=1024, kval=4096; //错误, 不是常量
const int ival=512 jval=1024, kval=4096; //正确。
int bufsize;
// ...
switch( swt ) {
case ival:
bufsize = ival * sizeof( int );
break;
case jval:
bufsize = jval * sizeof( int );
break;
case kval:
bufsize = kval * sizeof( int );
break;
}
enum { illustrator = 1, photoshop, photostyler = 2 }; //enum本身就是常量
switch (ival) {
case illustrator:
--illus_license;
break;
case photoshop:
--pshop_license;
break;
case photostyler:  //错误,不能有两个相同case
--pstyler_license;
break;
}

2. if(condition),switch(condition), while(condition)
condition 可以是一个表达式,也可以是一个变量声明,但for(;condition;)和do while(condition) 不可以是变量声明.
如果是变量的声明,则其所得的bool值以其变量的值为准,0为false, 其他为true,如下:
while(int a = 0){ } //其不会被执行, 因为a为0, 其表达式转为bool为false.
所以注意需要判断是需要把常量和变量换个位置.
while(0==a), 如果写成 while(0=a),编译器会提示错误.
对于condition中有变量声明时候,此变量只能在他的if的scope中存在,否则不存在.
if ( int ival = get_value())
  cout << "ival = "
       << ival << endl;
if ( ! ival )       //错误: ival只能在上个if语句中存在.此时已不存在.
cout << "ival = 0\n";

3. for 循环
for 循环的语法形式如下:
  for ( init-statement; condition; expression )
      statement;
  init-statement 初始化语句可以是声明语句或表达式,一般地它被用来对一个在循环过程中被递增的变量进行初始化或者赋给一个起始值.如果不需要初始化或者它已经在别处出现则可以省略init-statement.
  condition 条件语句用作循环控制, condition 计算结果为true 多少次则statement 语句就执行多少次.
  expression 表达式在循环每次迭代后被计算, 一般用它来修改在init-statement 中被初始化的,在condition 中被测试的变量. 如果condition 的第一次计算结果为false 则expression从不会被计算.
步骤:
1).在循环开始执行一次init-statement.
2).执行condition, 如果它的计算结果为true, 则执行复合语句.
3).执行expression.
4).重复执行第2步,第3步.

4. 异常
1). 通过调用 C标准库 abort()函数来终止程序.该函数在 C 头文件cstdlib中 #include<cstdlib>
// ...
if ( ! ptr )
abort();

2). 另一种方案是使用 assert()宏来终止程序, 但首先要声明引起断言的条件 #include<cassert>
// ...
 assert( ptr != 0 );

3). 第三种方案是抛出一个异常, 例如
if ( ! ptr )
  throw "Panic: ilist::insert(): ptr == 0";


TAG:

 

评分:0

我来说两句

Open Toolbar