中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++11中 constexpr構造函數的作用是什么

發布時間:2021-06-21 18:49:11 來源:億速云 閱讀:643 作者:Leah 欄目:大數據

這期內容當中小編將會給大家帶來有關C++11中 constexpr構造函數的作用是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

聚合類

聚合類(aggregate class)允許利用者直接訪問其成員,并且具有特殊的初始化形式。聚合類滿足以下條件:

  1. 所有成員都是public的

  2. 沒有定義構造函數

  3. 沒有類內初始值

  4. 沒有基類,也沒有虛函數

怎么理解呢?

首先,看來看去聚合類其實就是一個C結構體;其次,聚合這個詞,應該是相對組合的,表明了成員和類之間的松散關系。

當一個類是聚合類時,就可以使用初始值列表像下面這樣初始化了:

struct Point{
   int x;
   int y;
};
Point pt = {10, 10};

字面值常量類

前面講過constexpr函數,它的參數和返回值都必須是常量表達式。而常量表達式的最基本要素就是字面值類型。字面值類型除了包括算數類型,引用和指針以外,某些類也屬于字面值類型,C++11稱之為字面值常量類。主要包括兩種情況:

首先數據成員都是字面類型的聚合類就是一種。上面的Point類就是一個例子。我們可以這樣理解,字面值的聚合繼續具有字面值的特征,這里主要是編譯階段可以求值。

還有一種情況,雖然不是聚合類,但是只要滿足下面的條件,也是字面值常量類:

  1. 數據成員必須都必須是字面值類型。

  2. 類必須至少含有一個constexpr構造函數。

  3. 如果一個數據成員含有類內初始值,則初始值必須是常量表達式;如果成員屬于某種類,初始值必須使用該類的constexpr構造函數。

  4. 類必須使用析構函數的默認定義。

對于這幾個條件,作者這樣理解:

滿足條件1,就可以在編譯階段求值,這一點和聚合類一樣。

滿足條件2,就可以創建這個類的constexpr類型的對象。

滿足條件3,就可以保證即使有類內初始化,也可以在編譯階段解決。

滿足條件4,就可以保證析構函數沒有不能預期的操作。

constexpr構造函數

通過前置constexpr關鍵字,就可以聲明constexpr構造函數,同時:

除了聲明為=default或者=delete以外,constexpr構造函數的函數體一般為空,使用初始化列表或者其他的constexpr構造函數初始化所有數據成員。

struct Point{
   constexpr Point(int _x, int _y)
       :x(_x),y(_y){}
   constexpr Point()
       :Point(0,0){}
   int x;
   int y;
};

constexpr Point pt = {10, 10};

上述就是小編為大家分享的C++11中 constexpr構造函數的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵宝市| 满洲里市| 平罗县| 泾阳县| 苗栗市| 临澧县| 察隅县| 西城区| 田阳县| 唐河县| 乌审旗| 元朗区| 新蔡县| 宜兰市| 自治县| 苍山县| 灵武市| 巫溪县| 布尔津县| 凤冈县| 六安市| 梁河县| 昌图县| 济源市| 锦屏县| 盐边县| 册亨县| 滦平县| 凤城市| 读书| 安乡县| 信阳市| 晋江市| 上犹县| 阳信县| 石城县| 修文县| 利津县| 富裕县| 孟连| 旬阳县|