pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

如何從交換機(jī)內(nèi)部跳出循環(huán)?

How to break out of a loop from inside a switch?(如何從交換機(jī)內(nèi)部跳出循環(huán)?)
本文介紹了如何從交換機(jī)內(nèi)部跳出循環(huán)?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在編寫一些看起來像這樣的代碼:

I'm writing some code that looks like this:

while(true) {
    switch(msg->state) {
    case MSGTYPE: // ... 
        break;
    // ... more stuff ...
    case DONE:
        break; // **HERE, I want to break out of the loop itself**
    }
}

有沒有直接的方法可以做到這一點(diǎn)?

Is there any direct way to do that?

我知道我可以使用一個標(biāo)志,并通過在 switch 之后放置一個條件中斷來中斷循環(huán).我只是想知道 C++ 是否已經(jīng)為此提供了一些構(gòu)造.

I know I can use a flag, and break from the loop by putting a conditional break just after the switch. I just want to know if C++ has some construct for this already.

推薦答案

Premise

無論語言或所需功能如何,以下代碼都應(yīng)被視為不良形式:

Premise

The following code should be considered bad form, regardless of language or desired functionality:

while( true ) {
}

支持論據(jù)

while( true ) 循環(huán)是糟糕的形式,因為它:

Supporting Arguments

The while( true ) loop is poor form because it:

  • 打破 while 循環(huán)的隱含契約.
    • while 循環(huán)聲明應(yīng)明確聲明only 退出條件.
    • Breaks the implied contract of a while loop.
      • The while loop declaration should explicitly state the only exit condition.
      • 必須閱讀循環(huán)中的代碼才能理解終止子句.
      • 永遠(yuǎn)重復(fù)的循環(huán)會阻止用戶從程序中終止程序.
      • 有多種循環(huán)終止條件,包括檢查true".
      • 無法輕松確定將始終為每次迭代執(zhí)行的代碼放在哪里.
      • 要查找錯誤、分析程序復(fù)雜性、進(jìn)行安全檢查,或在不執(zhí)行代碼的情況下自動導(dǎo)出任何其他源代碼行為,指定初始破壞條件可讓算法確定有用的不變量,從而改進(jìn)自動源代碼分析指標(biāo).
      • 如果每個人都總是使用 while(true) 來表示非無限循環(huán),那么當(dāng)循環(huán)實際上沒有終止條件時,我們就失去了進(jìn)行簡潔交流的能力.(可以說,這已經(jīng)發(fā)生了,所以這一點(diǎn)沒有實際意義.)
      • If everyone always uses while(true) for loops that are not infinite, we lose the ability to concisely communicate when loops actually have no terminating condition. (Arguably, this has already happened, so the point is moot.)

      以下代碼是更好的形式:

      The following code is better form:

      while( isValidState() ) {
        execute();
      }
      
      bool isValidState() {
        return msg->state != DONE;
      }
      

      優(yōu)勢

      沒有標(biāo)志.沒有goto.沒有例外.容易改變.易于閱讀.易于修復(fù).另外代碼:

      Advantages

      No flag. No goto. No exception. Easy to change. Easy to read. Easy to fix. Additionally the code:

      1. 將循環(huán)工作負(fù)載的知識與循環(huán)本身隔離開來.
      2. 允許維護(hù)代碼的人員輕松擴(kuò)展功能.
      3. 允許在一處分配多個終止條件.
      4. 將終止子句與要執(zhí)行的代碼分開.
      5. 對核電站來說更安全.;-)

      第二點(diǎn)很重要.在不知道代碼如何工作的情況下,如果有人讓我讓主循環(huán)讓其他線程(或進(jìn)程)有一些 CPU 時間,我會想到兩種解決方案:

      The second point is important. Without knowing how the code works, if someone asked me to make the main loop let other threads (or processes) have some CPU time, two solutions come to mind:

      隨時插入停頓:

      while( isValidState() ) {
        execute();
        sleep();
      }
      

      選項#2

      覆蓋執(zhí)行:

      void execute() {
        super->execute();
        sleep();
      }
      

      此代碼比帶有嵌入式 switch 的循環(huán)更簡單(因此更易于閱讀).isValidState 方法應(yīng)該只確定循環(huán)是否應(yīng)該繼續(xù).方法的主力應(yīng)該抽象為 execute 方法,它允許子類覆蓋默認(rèn)行為(使用嵌入式 switchgoto).

      This code is simpler (thus easier to read) than a loop with an embedded switch. The isValidState method should only determine if the loop should continue. The workhorse of the method should be abstracted into the execute method, which allows subclasses to override the default behaviour (a difficult task using an embedded switch and goto).

      對比 StackOverflow 上發(fā)布的以下答案(針對 Python 問題):

      Contrast the following answer (to a Python question) that was posted on StackOverflow:

      1. 永遠(yuǎn)循環(huán).
      2. 請用戶輸入他們的選擇.
      3. 如果用戶的輸入是重啟",則永遠(yuǎn)繼續(xù)循環(huán).
      4. 否則,永遠(yuǎn)停止循環(huán).
      5. 結(jié)束.

      代碼

      while True: 
          choice = raw_input('What do you want? ')
      
          if choice == 'restart':
              continue
          else:
              break
      
      print 'Break!' 
      

      對比:

      1. 初始化用戶的選擇.
      2. 循環(huán),而用戶選擇的是重啟"這個詞.
      3. 請用戶輸入他們的選擇.
      4. 結(jié)束.

      代碼

      choice = 'restart';
      
      while choice == 'restart': 
          choice = raw_input('What do you want? ')
      
      print 'Break!'
      

      在這里,while True 會導(dǎo)致誤導(dǎo)和過于復(fù)雜的代碼.

      Here, while True results in misleading and overly complex code.

      這篇關(guān)于如何從交換機(jī)內(nèi)部跳出循環(huán)?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

      【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數(shù)據(jù)?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環(huán): for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環(huán)?)
Reusing thread in loop c++(在循環(huán) C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環(huán)形?)
主站蜘蛛池模板: 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 小型数控车床-数控车床厂家-双头数控车床 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 福尔卡(北京)新型材料技术股份有限公司| 浙江寺庙设计-杭州寺院设计-宁波寺庙规划_汉匠| 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 广州印刷厂_广州彩印厂-广州艺彩印务有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 茶叶百科网-茶叶知识与茶文化探讨分享平台| 数控走心机-双主轴走心机厂家-南京建克| 艺术涂料|木纹漆施工|稻草漆厂家|马来漆|石桦奴|水泥漆|选加河南天工涂料 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 小型气象站_车载气象站_便携气象站-山东风途物联网 | 培训无忧网-教育培训咨询招生第三方平台 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 无线对讲-无线对讲系统解决方案-重庆畅博通信| 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 九州网址_专注于提供网址大全分享推广中文网站导航服务 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 电主轴,车床电磨头,变频制动电机-博山鸿达特种电机 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 |