【Primer】Chapter-6 Statements

本文探讨了C++中的控制流结构,包括条件语句、循环语句、switch语句及异常处理机制。详细解释了悬垂else问题、switch语句的执行逻辑、变量作用域、while循环的应用实例等,并介绍了异常处理的基本概念。

单独的分号表示一个空语句

条件语句中的条件表达式中的变量类型必须是可以转换为bool值的,比如算术类型、指针类型,对类类型取决于类本身,IO类型可以作为条件,但是vector和string一般不可以作为条件

if(int ival=get_value);//ok
if(ival=0);//ok

悬垂else的二义性:C++ 中悬垂 else 问题带来的二义性,通过将 else 匹配给最后出现的尚未匹配的 if 子句来解决.所以花括号能这里不能省

     // oops: incorrect rewrite:
     // This code won't work!
     if (minVal <= ivec[i])
          if (minVal == ivec[i])
               ++occurs;
     else {      
     // this else goes with the inner if,
     // not the outer one!
          minVal = ivec[i];
          occurs = 1;
     }

switch控制流:case 标号必须是整型常量表达式(不能是变量)

存在一个普遍的误解:以为程序只会执行匹配的 case 标号相关联的语句。实际上,程序从该点开始执行,并跨越 case 边界继续执行其他语句,直到 switch 结束或遇到 break 语句为止。不要break在某些情况下也是需要的。

变量从它的定义点开始有效,直到它所在块结束为止.所以如果switch中的case后如果不跟着使用花括号括起来构成语句块中定义变量,则只能在最后一个case标号或者default后面定义变量,以避免出现代码跳过变量的定义和初始化的情况。

while语句,以及指针的使用,动态内存分配的使用例子:

    // arr1 is an array of ints
     int *source = arr1;
     // number of elements
     size_t sz = sizeof(arr1)/sizeof(*arr1); 
     // uninitialized elements
     int *dest = new int[sz];
     int *tp=dest;
     //  copy element and increment pointers
     while (source != arr1 + sz)
         *tp++ = *source++; 
     delete [] dest;

一个编程经验:使用文件结束符来控制循环cin输入时,如果要开始第二个循环输入,要先调用cin.clear();

cout<<"enter string(ctrl+z)"<<endl;
vector<string>a,b;
string tp;
while(cin>>tp)
{
	a.push_back(tp);
}
cin.clear();
while(cin>>tp)
{
	b.push_back(tp);
}
另外一个编程简洁风格:下面的循环在 vector 中搜索某个特殊值的第一次出现。一旦找到,则退出循环
vector<int>::iterator itr=vec.begin();
while(itr!=vec.end() && val!=*itr++);
if(itr!=vec.end())
//do something

continue语句:continue 语句导致最近的循环语句的当次迭代提前结束。对于 whiledo while 语句,继续求解循环条件。而对于 for 循环,程序流程接着求解 for 语句头中的 expression 表达式。

goto语句不能跨越变量的定义语句向前跳转:

     // ...
     goto end;
     int ix = 10; // error: goto bypasses declaration statement
 end:
     // error: code here could use ix but the goto bypassed its declaration
     ix = 42;
如果确实需要在 goto 和其跳转对应的标号之间定义变量,则定义必须放在一个块语句中:
         // ...
         goto end; // ok: jumps to a point where ix is not defined
         {
            int ix = 10;
            // ... code using ix
         }
     end: // ix no longer visible here

异常处理:没有异常处理则中断,退出程序

Try 。。。Catch。。。程序接着catch后面语句执行

抛出一个异常时,首先要搜索的是抛出异常的函数。如果没有找到匹配的 catch,则终止这个函数的执行,并在调用这个函数的函数中寻找相配的 catch。如果仍然找到相应的处理代码,该函数同样要终止,搜索调用它的函数。如此类推,继续按执行路径回退,直到找到适当类型的 catch 为止。

抛出异常即throw语句执行!

如果不存在处理该异常的 catch 子句,程序的运行就要跳转到名为 terminate 的标准库函数,该函数在 exception 头文件中定义。这个标准库函数的行为依赖于系统,通常情况下,它的执行将导致程序非正常退出。

在程序中出现的异常,如果没有经 try 块定义,则都以相同的方式来处理:毕竟,如果没有任何 try 块,也就没有捕获异常的处理代码(catch 子句)。此时,如果发生了异常,系统将自动调用 terminate 终止程序的执行。

内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值