在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_B3xDfZry ? 來源:C語言學(xué)習(xí)聯(lián)盟 ? 作者:C語言學(xué)習(xí)聯(lián)盟 ? 2022-10-14 10:50 ? 次閱讀

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

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

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

1 帶初始化的if語句

if初始化語句中定義的變量在整個(gè)if語句范圍內(nèi)都是生效的。包括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的生命周期在執(zhí)行完if語句后就被析構(gòu)了。在來看下面這段代碼。這段代碼來源于https://wg21.link/p0305r0。如下:

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

上面的這段代碼轉(zhuǎn)換成舊式代碼如下:

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

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

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

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

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

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

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

最后,還可以在if語句中對(duì)map進(jìn)行插入操作,并對(duì)插入結(jié)果進(jìn)行檢查,代碼如下:

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中獲取一個(gè)實(shí)例,然后根據(jù)實(shí)例的狀態(tài)做不同的處理。代碼如下:

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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Switch
    +關(guān)注

    關(guān)注

    1

    文章

    533

    瀏覽量

    58497
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73887
  • 初始化
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    11954

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

文章出處:【微信號(hào):C語言學(xué)習(xí)聯(lián)盟,微信公眾號(hào):C語言學(xué)習(xí)聯(lián)盟】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread自動(dòng)初始化詳解

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

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

    在C語言中,有三種條件判斷結(jié)構(gòu):if語句、if-else語句switch語句
    發(fā)表于 08-18 16:36 ?1.2w次閱讀
    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>

    自動(dòng)初始化機(jī)制原理詳解

    自動(dòng)初始化機(jī)制是指初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過宏定義的方式進(jìn)行申明,就會(huì)在系統(tǒng)啟動(dòng)過程中被執(zhí)行。這篇文章就來探索一下其中的奧秘, 簡單理解其原理!
    的頭像 發(fā)表于 12-16 09:33 ?1089次閱讀
    自動(dòng)<b class='flag-5'>初始化</b>機(jī)制原理<b class='flag-5'>詳解</b>

    變量初始化的基本原則

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

    USART初始化結(jié)構(gòu)體詳解

    USART 初始化結(jié)構(gòu)體詳解標(biāo)準(zhǔn)庫函數(shù)對(duì)每個(gè)外設(shè)都建立了一個(gè)初始化結(jié)構(gòu)體,比如USART_InitTypeDef,結(jié)構(gòu)體成員用于設(shè)置外設(shè)工作參數(shù),并由外設(shè)初始化配置函數(shù),比如USART
    發(fā)表于 02-22 06:08

    手機(jī)模塊初始化向?qū)?/a>

    手機(jī)模塊初始化向?qū)?為了剛好的對(duì)手機(jī)模塊進(jìn)行初始化,所以把最基本的向?qū)懴聛?本向?qū)нm用于本公司的西門子TC35I和華為GT9000模塊。一、在初始化手機(jī)模塊前,請(qǐng)先確定DT
    發(fā)表于 09-18 09:41 ?17次下載

    RDA1846S初始化設(shè)置

    RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置RDA1846S初始化設(shè)置
    發(fā)表于 01-15 17:08 ?0次下載

    UCOS_III_配置與初始化

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

    HX711初始化程序

    這是HX711的初始化程序
    發(fā)表于 02-08 01:51 ?91次下載

    ds1302時(shí)鐘芯片初始化,自動(dòng)決定DS1302是否需要初始化程序

    ds1302芯片時(shí)鐘芯片大家都在問到底需要不需要初始化?這篇文章將會(huì)給大家一個(gè)程序,可以自動(dòng)決定DS1302是否需要初始化
    發(fā)表于 10-19 19:19 ?8651次閱讀

    8253初始化程序分享_8253應(yīng)用案例

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

    在51平臺(tái)下初始化文件的引入導(dǎo)致全局變量無法初始化的問題如何解決

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

    一文詳解RT-Thread自動(dòng)初始化

    在學(xué)RT-Thread時(shí),經(jīng)常能聽到這個(gè)詞:自動(dòng)初始化。用起來也非常容易,一個(gè)宏就解決了,但是原理是什么呢?
    的頭像 發(fā)表于 07-21 10:17 ?7680次閱讀
    一文<b class='flag-5'>詳解</b>RT-Thread自動(dòng)<b class='flag-5'>初始化</b>

    C++之初始化列表學(xué)習(xí)的總結(jié)

    類中可以使用初始化列表對(duì)成員進(jìn)行初始化
    的頭像 發(fā)表于 12-24 17:39 ?901次閱讀

    Java中switch語句的使用

    在Java學(xué)習(xí)中我們見過很多有意思的語句if語句、for語句、while語句switch語句
    的頭像 發(fā)表于 03-08 11:03 ?1171次閱讀
    Java中<b class='flag-5'>switch</b><b class='flag-5'>語句</b>的使用
    主站蜘蛛池模板: 欧美影欧美影院免费观看视频 | rrr523亚洲国产片 | 色爱区综合五月激情 | 午夜国产高清精品一区免费 | 国内精品免费视频自在线 | 噜噜色.com | 乱码一区二区三区完整视频 | 国产福利毛片 | 大桥未久加勒比女热大陆在线 | 额去鲁97在线观看视频 | 黄免费看 | 欧美成人看片一区二区三区 | 亚洲天天做夜夜做天天欢人人 | 黄色日比 | 欧美一级欧美三级在线观看 | 四虎国产精品免费久久影院 | xxxxxxxxxxx性bbbb| 久久成人综合 | 如果我们是季节韩剧在线观看 | 午夜影视体验区 | 91久久婷婷国产综合精品青草 | 李老汉的性生生活1全部 | 国产美女在线精品观看 | 久久99热不卡精品免费观看 | 你懂的视频在线看 | 国产精品欧美一区二区三区不卡 | www.狠狠干| 岛国毛片| 亚洲高清不卡视频 | 久久国内视频 | 一级毛片在线播放 | 伊人草| 97人人视频 | 国产一级毛片午夜福 | 4438x色| 久久久精品久久久久久久久久久 | 久久6免费视频 | 在线你懂的 | 亚洲一区二区免费视频 | 中文字幕va一区二区三区 | 韩国一级网站 |