您的位置:学习中国 推荐教程 C++C语言 正文
原作者:kuku 添加时间:2007-06-02 原文发表:2007-06-02 人气:81 来源:互联网

本文章共9192字,分6页,当前第6页,快速翻页:
 



  为什么C++要提供上面的三种循环语句?简写是一重要目的,但更重要的是可以提供一定的优化。for被设计成用于固定次数的循环,而while和do while都是用于条件决定的循环。对于前者,编译器就可以将前面提过的用于记数的变量映射成寄存器以优化速度,而后者就要视编译器的智能程度来决定是否能生成优化代码了。


  while和do while的主要区别就是前者的循环体不一定会被执行,而后者的循环体一定至少会被执行一次。而出于简写的目的,C++又提出了continue和break语句。如下: for( long i = 0; i < 10; i++ )
{
if( !( i % 3 ) )
continue;
if( !( i % 7 ) )
break;
// 其他语句
}
  上面当i的值能被3整除时,就不执行后面的“其他语句”,而是直接计算i++,再计算i < 10以决定是否继续循环。即continue就是终止当前这次循环的执行,开始下一次的循环。上面当i的值能被7整除时,就不执行后面的“其他语句”,而是跳出循环体,执行for后的语句。即break就是终止循环的运行,立即跳出循环体。如下: while( --i ) do
{ {
if( i == 10 ) if( i == 10 )
continue; continue;
if( i > 20 ) if( i > 20 )
break; break;
// 其他语句 // 其他语句
} }while( --i );
a = i; a = i;
  上面的continue;执行时都将立即计算—i以判断是否继续循环,而break;执行时都将立即退出循环体进而执行后继的a = i;。

  还应注意嵌套问题,即前面说过的else在寻找配对的if时,总是找最近的一个if,这里依旧。 long a = 0;
P1:
for( long i = a; i < 10; i++ )
for( long j = 0; j < 10; j++ )
{
if( !( j % 3 ) )
continue;
if( !( j % 7 ) )
break;
if( i * j )
{
a = i * j;
goto P1;
}
// 其他语句
}
  上面的continue;执行后,将立即计算j++,而break;执行后,将退出第二个循环(即j的循环),进而执行i++,然后继续由i < 10来决定是否继续循环。当goto P1;执行时,程序跳到上面的P1处,即执行long i = a;,进而重新开始i的循环。

  上面那样书写goto语句是不被推荐的,因为其破坏了循环,不符合人的思维习惯。在此只是要说明,for或while、do while等都不是循环,只是它们各自的用处最后表现出来好象是循环,实际只是程序执行位置的变化。应清楚语句的实现,这样才能清楚地了解各种语句的实际作用,进而明确他人写的代码的意思。而对于自己书写代码,了解语句的实现,将有助于进行一定的优化。但当你写出即精简又执行效率高的程序时,保持其良好的可读性是一个程序员的素养,应尽量培养自己书写可读性高的代码的习惯。

  上面的long j = 0在第一个循环的循环体内,被多次执行岂不是要多次定义?这属于变量的作用域的问题,下篇将说明。

  本篇的内容应该是很简单的,重点只是应该理解源代码编译成机器指令后,在执行时也放在内存中,故每条语句都对应着一个地址,而通过跳转语句即可改变程序的运行顺序。下篇将对此提出一系列的概念,并重点说明类型的意义。


 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 6
本页地址
相关文章

C++程序中导出Word文档简易方法
理解隐式接口和编译期多态
C++对象布局及多态之虚成员函数调用
如何访问模板化基类中的名字
对象布局及多态探索之菱形结构虚继承
C++之父Bjarne谈C++中的STL模板
C++箴言:用成员函数模板接受兼容类型
探索C++的秘密之详解extern C
C++箴言:为类型信息使用特征类
创建可移植的64位应用程序代码
对象布局及多态实现之成员函数的调用
C++箴言:谨慎使用私有继承
C++编程人员容易犯的10个C#错误
C语言 编程实例

相关评论


本文章所属分类:首页 推荐教程 C++C语言   C++C语言