最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++11系列學(xué)習(xí)之列表初始化

 更新時(shí)間:2022年04月25日 09:49:18   作者:小杰編程  
這篇文章主要介紹了C++11系列學(xué)習(xí)之列表初始化,標(biāo)準(zhǔn)初始化方式太過繁雜,限制偏多,因此在新標(biāo)準(zhǔn)中統(tǒng)一了初始化方,為了讓初始化具有確定的效果,于是提出了列表初始化概念,下文我們就一起來學(xué)習(xí)該詳細(xì)內(nèi)容介紹吧

前言:

由于舊標(biāo)準(zhǔn)初始化方式太過繁雜,限制偏多,因此在新標(biāo)準(zhǔn)中統(tǒng)一了初始化方式,為了讓初始化具有確定的效果,于是提出了列表初始化概念。

舊標(biāo)準(zhǔn)初始化方式

普通數(shù)組初始化:

int i_arr[3] = {1, 2, 3}

POD類型初始化(即plain old data類型,可以直接使用memcpy復(fù)制的對(duì)象):

struct A
{
int x;
struct B
{
int i;
int j;
} b;
} a = {1, {2, 3}};

拷貝初始化:

int i = 0;
class Foo
{
public:
Foo(int) {}
} foo = 123

直接初始化:

int j(0)
Foo bar(123)

C++11標(biāo)準(zhǔn)初始化方式

C++11標(biāo)準(zhǔn)中{}的初始化方式是對(duì)聚合類型的初始化,是以拷貝的形式來賦值的。

C++11標(biāo)準(zhǔn)中對(duì)非聚合類型則以構(gòu)造函數(shù)來進(jìn)行初始化的。

聚合類型:

  • 類型是一個(gè)普通的數(shù)組
  • 類型是一個(gè)類,

并且滿足以下條件:

  • 無用戶自定義的構(gòu)造函數(shù)
  • 無私有或保護(hù)的非靜態(tài)數(shù)據(jù)成員
  • 無基類
  • 無虛函數(shù)
  • 不能有 { } 和 = 直接初始化的非靜態(tài)數(shù)據(jù)成員

初始化列表技術(shù)細(xì)節(jié)

觀察下面這兩個(gè):

int arr[] {1, 2, 3}
std::set<int> ss = {1, 2, 3}

之所以可以實(shí)現(xiàn)STL中不指定個(gè)數(shù)進(jìn)行初始化,依賴的就是與i個(gè)輕量級(jí)的類模板,也是C++11中的新特性std::initializer_listinitializer_list使用

class FooVector
{
std::vector<int> content_;
public:
FooVector(std::initializer_list<int> list){ //重要技術(shù)點(diǎn)
for(auto it = list.begin(); it != list.end(); ++it){
content_.back(*it)
}
}
}
FooVector foo_1 = {1, 2, 3, 4, 5} //不僅可以這樣
FooVector foo_2({1, 2, 3, 4, 5}) //還可以傳一個(gè)同種類型數(shù)據(jù)集合

initializer_list的特點(diǎn):

  • 它是一個(gè)輕量級(jí)的容器類型,內(nèi)部定義了iterator等容器必需的概念
  • 對(duì)于std::initializer_list來說,它可以接收任意長度的初始化列表,但要求元素類型必須是同種類型T(或者可轉(zhuǎn)換為T)
  • 它有3個(gè)成員接口:size () 、 begin() 、end()
  • 它只能被整體初始化或賦值

注意:std::initializer_list 是非常高效的,因此內(nèi)部并不負(fù)責(zé)保存初始化列表中的元素的拷貝,而是僅僅存儲(chǔ)列表中元素的引用!因此不能用來返回臨時(shí)變量!

避免類型收窄:

C++有隱式類型轉(zhuǎn)換的特性,比如將一個(gè)浮點(diǎn)數(shù)賦值給一個(gè)整數(shù),精度會(huì)丟失,小數(shù)點(diǎn)后會(huì)被直接截?cái)?。初始化列表可以幫助避免隱式類型轉(zhuǎn)換。因?yàn)槠洳辉试S這種轉(zhuǎn)換發(fā)生。

但是也會(huì)隨著編譯器的不同而不同:

float ff = 1.2
float ff = {1.2}

在gcc4.8下沒有警告和錯(cuò)誤,但Microsoft Visual C++2013中,收到編譯錯(cuò)誤。因?yàn)?.2默認(rèn)是double類型,由double轉(zhuǎn)換成float會(huì)發(fā)生隱式類型轉(zhuǎn)換,但是并沒有發(fā)生精度損失。

總結(jié)

C++11新增的初始化方式,為程序的編寫帶來了很多的便利,這也是新標(biāo)準(zhǔn)秉承的思想和改進(jìn)的方向。

到此這篇關(guān)于C++11系列學(xué)習(xí)之列表初始化的文章就介紹到這了,更多相關(guān)C++11列表初始化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C語言中二分查找的運(yùn)用技巧

    詳解C語言中二分查找的運(yùn)用技巧

    本文主要介紹了二分查找在實(shí)際中的應(yīng)用,通過分析幾個(gè)應(yīng)用二分查找的實(shí)例,總結(jié)下能使用二分查找算法的一些共同點(diǎn),感興趣的可以了解一下
    2022-03-03
  • C++ string類getline()用法實(shí)例詳解

    C++ string類getline()用法實(shí)例詳解

    C++ getline()是一種標(biāo)準(zhǔn)庫函數(shù),用于從輸入流中讀取字符串或行,它是<string>標(biāo)頭的一部分,本文介紹C++ string類getline()用法詳解,感興趣的朋友一起看看吧
    2024-03-03
  • 深入Main函數(shù)中的參數(shù)argc,argv的使用詳解

    深入Main函數(shù)中的參數(shù)argc,argv的使用詳解

    本篇文章是對(duì)Main函數(shù)中的參數(shù)argc,argv的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解OpenMP的線程同步機(jī)制

    詳解OpenMP的線程同步機(jī)制

    在本篇文章當(dāng)中主要給大家介紹?OpenMP?當(dāng)中線程的同步和互斥機(jī)制,在?OpenMP?當(dāng)中主要有三種不同的線程之間的互斥方式。下面就來和大家來討論一下OpenMP當(dāng)中的互斥操作,需要的可以參考一下
    2023-01-01
  • C語言求兩個(gè)正整數(shù)的最大公約數(shù)示例代碼

    C語言求兩個(gè)正整數(shù)的最大公約數(shù)示例代碼

    在C語言中求兩個(gè)數(shù)的最大公約數(shù)是學(xué)習(xí)循環(huán)語句的非常經(jīng)典的問題,下面這篇文章主要給大家介紹了關(guān)于C語言求兩個(gè)正整數(shù)的最大公約數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • C語言聯(lián)合體Union特點(diǎn)及運(yùn)用全面講解教程

    C語言聯(lián)合體Union特點(diǎn)及運(yùn)用全面講解教程

    這篇文章主要為大家介紹了C語言聯(lián)合體Union特點(diǎn)及運(yùn)用的全面講解教程有需要深度朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • 詳解C語言-二級(jí)指針三種內(nèi)存模型

    詳解C語言-二級(jí)指針三種內(nèi)存模型

    這篇文章主要介紹了詳解C語言-二級(jí)指針三種內(nèi)存模型的相關(guān)知識(shí),文中代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C++類和對(duì)象之封裝詳解

    C++類和對(duì)象之封裝詳解

    大家好,本篇文章主要講的是C++類和對(duì)象之封裝詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語言學(xué)籍管理系統(tǒng)源代碼

    C語言學(xué)籍管理系統(tǒng)源代碼

    這篇文章主要為大家詳細(xì)介紹了C語言學(xué)籍管理系統(tǒng)源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C與C++中結(jié)構(gòu)體的區(qū)別

    C與C++中結(jié)構(gòu)體的區(qū)別

    C中的結(jié)構(gòu)體只涉及到數(shù)據(jù)結(jié)構(gòu),而不涉及到算法,也就是說在C中數(shù)據(jù)結(jié)構(gòu)和算法是分離的,而到C++中一類或者一個(gè)結(jié)構(gòu)體可以包含函數(shù)(這個(gè)函數(shù)在C++我們通常中稱為成員函數(shù)),C++中的結(jié)構(gòu)體和類體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)和算法的結(jié)合
    2013-10-10

最新評(píng)論

芦山县| 佛冈县| 万山特区| 广饶县| 南陵县| 西丰县| 包头市| 江城| 平舆县| 那曲县| 辉县市| 都江堰市| 长治市| 虹口区| 静宁县| 和硕县| 南投市| 玛多县| 酒泉市| 西峡县| 昭苏县| 大名县| 靖边县| 新闻| 阿勒泰市| 黔西| 舟山市| 麦盖提县| 鹿邑县| 射阳县| 江津市| 邮箱| 惠州市| 徐闻县| 若羌县| 东丰县| 开江县| 洛阳市| 佛教| 德清县| 青岛市|