女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

帶初始化的if和switch語句詳解

jf_B3xDfZry ? 來源:C語言學習聯盟 ? 作者:C語言學習聯盟 ? 2022-10-14 10:50 ? 次閱讀

早在2016-03-14,Thomas K?ppe 就提出了在if和switch使用初始化語句,使用時的代碼示例如下:

if (int s = check(); s != 0) {
return s;
}

在上面的代碼中,初始化語句是int s = check()。s的生命周期是整個if語句,這里也包含else語句。

1 帶初始化的if語句

if初始化語句中定義的變量在整個if語句范圍內都是生效的。包括else if和else語句。例如:

std::ofstream getLogStrm(){
    std::ofstream file3("c:\x.123");
    return file3;
};
std::map coll;
int main()
{
   if (std::ofstream strm = getLogStrm(); coll.empty()) {
        strm << "
";
        }
        else {
        for (const auto& elem : coll) {
            strm << elem.first << '
';
        }
????}
    return 0;
}

如上,if語句中的strm的生命周期在執行完if語句后就被析構了。在來看下面這段代碼。這段代碼來源于https://wg21.link/p0305r0。如下:

if (std::lock_guard lk(mx_); v.empty()) {
    v.push_back(kInitialValue);
}

上面的這段代碼轉換成舊式代碼如下:

std::lock_guard lk(mx_)
if(v.empty(){
  v.push_back(kInitialValue);
}

可以看出,兩段代碼幾乎沒有什么區別,唯一的差別可能是lock_guard定義的位置不一樣。

同樣,為了讓lock_guard有效,就需要給它定義一個變量。如果沒有定義變量那么它在創建后就會立即被銷毀。如下:

if(std::lock_guard{mx_};
  v.empty()) //鎖已經被銷毀
  {
    v.push_back(kInitialValue);
}

上面的代碼中,鎖被定義后就立即被銷毀,在執行后面的語句時實際上是沒有加鎖的。

同樣,在if初始化語句中也可以初始化多個變量,如:

if (int x = qqq1(), int y = qqq2(); x != y) {
    std::cout << "return values " << x << " and " << y << "differ
";
}

最后,還可以在if語句中對map進行插入操作,并對插入結果進行檢查,代碼如下:

int main()
{
   std::map mymap;
   mymap.insert ({'a',100});
   if(auto [pos,ok] = mymap.insert({'a',100});!ok){
       auto [key,var] = *pos;
       std::cout << "already there: " << key << '
';
   }
  return 0;
}

2 帶初始化的switch語句

在switch語句中使用初始化語句和if中相似,如下代碼,可以在switch中獲取一個實例,然后根據實例的狀態做不同的處理。代碼如下:

switch (Foo x = make_foo(); x.status()) {
  default: /* ... */
  case Foo: /* ... */
  case Foo: /* ... */
  case Foo: /* ... */
}

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Switch
    +關注

    關注

    1

    文章

    535

    瀏覽量

    59268
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74778
  • 初始化
    +關注

    關注

    0

    文章

    50

    瀏覽量

    12048

原文標題:C++17 常用新特性:帶初始化的 if 和 switch 語句

文章出處:【微信號:C語言學習聯盟,微信公眾號:C語言學習聯盟】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    RT-Thread自動初始化詳解

    我們知道,在寫裸機程序時,當我們完成硬件初始化后,就需要在主函數中進行調用。當我們使用RT-Thread后,完全不需要這樣做了,我們可以將硬件等自動初始化。 RT-Thread?自動初始化機制是指
    的頭像 發表于 06-25 21:38 ?1.2w次閱讀
    RT-Thread自動<b class='flag-5'>初始化</b><b class='flag-5'>詳解</b>

    C語言中if語句、if-else語句switch語句詳解

    在C語言中,有三種條件判斷結構:if語句、if-else語句switch語句
    發表于 08-18 16:36 ?1.3w次閱讀
    C語言中if<b class='flag-5'>語句</b>、if-else<b class='flag-5'>語句</b>和<b class='flag-5'>switch</b><b class='flag-5'>語句</b><b class='flag-5'>詳解</b>

    自動初始化機制原理詳解

    自動初始化機制是指初始化函數不需要被顯式調用,只需要在函數定義處通過宏定義的方式進行申明,就會在系統啟動過程中被執行。這篇文章就來探索一下其中的奧秘, 簡單理解其原理!
    的頭像 發表于 12-16 09:33 ?1320次閱讀
    自動<b class='flag-5'>初始化</b>機制原理<b class='flag-5'>詳解</b>

    變量初始化的基本原則

    一、變量初始化變量初始化的基本原則為:可綜合代碼中完成內部變量的初始化,Testbench中完成可綜合代碼所需的各類接口信號的初始化初始化
    發表于 01-19 07:07

    USART初始化結構體詳解

    USART 初始化結構體詳解標準庫函數對每個外設都建立了一個初始化結構體,比如USART_InitTypeDef,結構體成員用于設置外設工作參數,并由外設初始化配置函數,比如USART
    發表于 02-22 06:08

    手機模塊初始化向導

    手機模塊初始化向導:為了剛好的對手機模塊進行初始化,所以把最基本的向導寫下來.本向導適用于本公司的西門子TC35I和華為GT9000模塊。一、在初始化手機模塊前,請先確定DT
    發表于 09-18 09:41 ?17次下載

    RDA1846S初始化設置

    RDA1846S初始化設置RDA1846S初始化設置RDA1846S初始化設置
    發表于 01-15 17:08 ?0次下載

    UCOS_III_配置與初始化

    UCOS_III_配置與初始化
    發表于 12-20 22:53 ?5次下載

    HX711初始化程序

    這是HX711的初始化程序
    發表于 02-08 01:51 ?92次下載

    ds1302時鐘芯片初始化,自動決定DS1302是否需要初始化程序

    ds1302芯片時鐘芯片大家都在問到底需要不需要初始化?這篇文章將會給大家一個程序,可以自動決定DS1302是否需要初始化
    發表于 10-19 19:19 ?8880次閱讀

    8253初始化程序分享_8253應用案例

    本文首先介紹了8253概念及8253各通道的工作方式,其次詳細介紹了8253初始化要求及編程,最后用一個例子介紹了8253的初始化程序。
    發表于 05-23 15:52 ?2.3w次閱讀
    8253<b class='flag-5'>初始化</b>程序分享_8253應用案例

    在51平臺下初始化文件的引入導致全局變量無法初始化的問題如何解決

    本文檔的主要內容詳細介紹的是在51平臺下初始化文件的引入導致全局變量無法初始化的問題如何解決。
    發表于 08-20 17:31 ?0次下載
    在51平臺下<b class='flag-5'>初始化</b>文件的引入導致全局變量無法<b class='flag-5'>初始化</b>的問題如何解決

    一文詳解RT-Thread自動初始化

    在學RT-Thread時,經常能聽到這個詞:自動初始化。用起來也非常容易,一個宏就解決了,但是原理是什么呢?
    的頭像 發表于 07-21 10:17 ?7991次閱讀
    一文<b class='flag-5'>詳解</b>RT-Thread自動<b class='flag-5'>初始化</b>

    C++之初始化列表學習的總結

    類中可以使用初始化列表對成員進行初始化
    的頭像 發表于 12-24 17:39 ?1056次閱讀

    Java中switch語句的使用

    在Java學習中我們見過很多有意思的語句if語句、for語句、while語句switch語句
    的頭像 發表于 03-08 11:03 ?1341次閱讀
    Java中<b class='flag-5'>switch</b><b class='flag-5'>語句</b>的使用