亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++中不必要的花括號?

C ++中不必要的花括號?

C++
青春有我 2019-12-17 10:47:45
今天在為一位同事進行代碼審查時,我看到了一件奇怪的事情。他用如下花括號將新代碼括起來:Constructor::Constructor(){   existing code   {      New code: do some new fancy stuff here   }   existing code}這樣做的結果是什么?這樣做的原因可能是什么?這個習慣從哪里來?編輯:基于輸入和下面的一些問題,即使我已經標記了答案,我仍必須在問題中添加一些內容。該環境是嵌入式設備。有很多用C ++語言編寫的遺留C代碼。有很多C語言轉換的C ++開發人員。在代碼的這一部分中沒有關鍵部分。我僅在代碼的這一部分中看到過它。沒有完成主要的內存分配,僅設置了一些標志,并且有些混亂?;ɡㄌ柊鼑拇a是這樣的:{   bool isInit;   (void)isStillInInitMode(&isInit);   if (isInit) {     return isInit;   }}(不用管代碼,只是堅持使用大括號...;)在大括號之后,還有更多的旋轉,狀態檢查和基本的信號傳遞。我和那個家伙談過,他的動機是限制變量的范圍,命名沖突以及其他一些我無法真正理解的東西。從我的POV來看,這似乎很奇怪,我認為花括號不應該放在我們的代碼中。我在所有答案中都看到了一些很好的示例,說明了為什么可以用花括號將代碼括起來,但是您是否不應該將代碼分成方法呢?
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

有時會很不錯,因為它為您提供了一個新的作用域,您可以在其中更“干凈地”聲明新的(自動)變量。

C++這也許不那么重要,因為你可以在任何地方引入新的變量,但也許是習慣是C,你不能這樣做,直到C99。:)

由于C++具有析構函數,因此在范圍退出時自動釋放資源(文件,互斥對象等)也很方便,這可以使事情變得更整潔。這意味著您可以比在方法開始時獲取共享資源的時間短。


查看完整回答
反對 回復 2019-12-17
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

一種可能的目的是控制可變范圍。并且由于具有自動存儲的變量在超出范圍時會被破壞,因此這也可以使析構函數的調用早于其他方式。


查看完整回答
反對 回復 2019-12-17
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

多余的花括號用于定義在花括號內聲明的變量的范圍。這樣做是為了在變量超出范圍時調用析構函數。在析構函數中,您可以釋放互斥鎖(或任何其他資源),以便其他人可以獲取它。


在生產代碼中,我寫了這樣的東西:


void f()

{

   //some code - MULTIPLE threads can execute this code at the same time


   {

       scoped_lock lock(mutex); //critical section starts here


       //critical section code

       //EXACTLY ONE thread can execute this code at a time


   } //mutex is automatically released here


  //other code  - MULTIPLE threads can execute this code at the same time

}

如您所見,通過這種方式,您可以scoped_lock 在一個函數中使用它,同時可以通過使用額外的花括號來定義其范圍。這樣可以確保即使多余括號外的代碼可以同時由多個線程執行,括號內的代碼一次也只能由一個線程執行。


查看完整回答
反對 回復 2019-12-17
  • 3 回答
  • 0 關注
  • 500 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號