3 回答

TA貢獻(xiàn)1820條經(jīng)驗 獲得超10個贊
C ++ 14改變了什么
我們可以參考Draft C ++ 14標(biāo)準(zhǔn)以供參考。
骨料
8.5.1
聚合部分對此進(jìn)行了介紹,它給出了以下定義:
聚合是一個數(shù)組或類(第9條),沒有用戶提供的構(gòu)造函數(shù)(12.1),沒有私有或受保護(hù)的非靜態(tài)數(shù)據(jù)成員(第11條),沒有基類(第10條),沒有虛函數(shù)(10.3) )。
唯一的變化是現(xiàn)在添加類內(nèi)成員初始值設(shè)定項不會使類成為非聚合。因此,以下來自C ++ 11的示例聚合了具有成員in-pace initializers的類的初始化:
struct A{ int a = 3; int b = 3;};
它不是C ++ 11中的聚合,而是C ++ 14中的聚合。N3605中包含此更改:成員初始值設(shè)定項和聚合,具有以下摘要:
Bjarne Stroustrup和Richard Smith提出了一個關(guān)于聚合初始化和成員初始化器無法協(xié)同工作的問題。本文提出通過采用史密斯提出的措辭來解決這個問題,該措辭消除了聚合不能擁有成員初始化者的限制。
POD保持不變
POD(普通舊數(shù)據(jù))結(jié)構(gòu)的定義在9
類Classes中介紹,它們說:
POD結(jié)構(gòu)110是非聯(lián)合類,它既是普通類又是標(biāo)準(zhǔn)布局類,并且沒有非POD結(jié)構(gòu)類型的非靜態(tài)數(shù)據(jù)成員,非POD聯(lián)合(或這種類型的數(shù)組)。類似地,POD聯(lián)合是一個簡單類和標(biāo)準(zhǔn)布局類的聯(lián)合,并且沒有非POD結(jié)構(gòu)類型的非靜態(tài)數(shù)據(jù)成員,非POD聯(lián)合(或這種類型的數(shù)組)。POD類是POD結(jié)構(gòu)或POD聯(lián)合的類。
這與C ++ 11的措辭相同。
C ++的標(biāo)準(zhǔn)布局更改14
正如評論中所指出的,pod依賴于標(biāo)準(zhǔn)布局的定義,并且對于C ++ 14確實(shí)有所改變,但這是通過在事實(shí)之后應(yīng)用于C ++ 14的缺陷報告實(shí)現(xiàn)的。
有三個DR:
所以標(biāo)準(zhǔn)布局來自這個Pre C ++ 14:
標(biāo)準(zhǔn)布局類是一個類:
(7.1)沒有非標(biāo)準(zhǔn)布局類(或這類類型的數(shù)組)或引用類型的非靜態(tài)數(shù)據(jù)成員,
(7.2)沒有虛函數(shù)([class.virtual]),沒有虛基類([class.mi]),
(7.3)對所有非靜態(tài)數(shù)據(jù)成員具有相同的訪問控制(Clause [class.access]),
(7.4)沒有非標(biāo)準(zhǔn)布局基類,
(7.5)在大多數(shù)派生類中沒有非靜態(tài)數(shù)據(jù)成員,并且最多只有一個具有非靜態(tài)數(shù)據(jù)成員的基類,或者沒有具有非靜態(tài)數(shù)據(jù)成員的基類,并且
(7.6)沒有與第一個非靜態(tài)數(shù)據(jù)成員相同類型的基類
為了在C ++ 14:
類S是標(biāo)準(zhǔn)布局類,如果它:
(3.1)沒有非標(biāo)準(zhǔn)布局類(或這類類型的數(shù)組)或引用的非靜態(tài)數(shù)據(jù)成員,
(3.2)沒有虛函數(shù),也沒有虛基類,
(3.3)對所有非靜態(tài)數(shù)據(jù)成員具有相同的訪問控制,
(3.4)沒有非標(biāo)準(zhǔn)布局基類,
(3.5)最多有一個任何給定類型的基類子對象,
(3.6)該類中的所有非靜態(tài)數(shù)據(jù)成員和位字段及其基類首先在同一個類中聲明,并且
(3.7)沒有集合M(S)類型的元素作為基類,其中對于任何類型X,M(X)定義如下.104 [注意:M(X)是類型的集合在X中可能處于零偏移的所有非基類子對象。 - 結(jié)束注釋]
(3.7.1)如果X是非聯(lián)合類類型,沒有(可能是繼承的)非靜態(tài)數(shù)據(jù)成員,則集合M(X)為空。
(3.7.2)如果X是非聯(lián)合類類型,其類型為X0的非靜態(tài)數(shù)據(jù)成員,其大小為零或者是X的第一個非靜態(tài)數(shù)據(jù)成員(其中所述成員可能是匿名聯(lián)合),集合M(X)由X0和M(X0)的元素組成。
(3.7.3)如果X是聯(lián)合類型,則集合M(X)是所有M(Ui)和包含所有Ui的集合的并集,其中每個Ui是X的第i個非靜態(tài)數(shù)據(jù)成員的類型。 。
(3.7.4)如果X是元素類型為Xe的數(shù)組類型,則集合M(X)由Xe和M(Xe)的元素組成。
(3.7.5)如果X是非類非數(shù)組類型,則集合M(X)為空。
- 3 回答
- 0 關(guān)注
- 594 瀏覽
添加回答
舉報