青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-59  評論-36  文章-0  trackbacks-0

看完ISO C++ 12.8一節(jié)后,做如下筆記。


當一個類對象被用來初始化或賦值時會通過該類的復制構造或重載賦值操作符被復制。

復制構造函數
1.類A的復制構造函數不能是模板,模板復制構造函數不會阻止默認復制構造的生成。復制構造函數可以有不止一個參數,但不論有幾個參數,其第一個參數必須是A &、const A &、volatile A &或const volatile A &型之一(均不能為非引用型),其他形參必須有默認實參,且默認實參必須出現在復制構造函數的聲明中。這是因為對于:
classX
{
public:
 X(const X&, int);
};
X::X(const X& ,int = 9){}
因為如果沒有在類的定義體中沒有顯示的聲明一個復制構造函數,編譯器將自動隱士聲明一個。所以盡管在實現中對第二個參數提供了默認實參,但由于類中沒有顯示的聲明復制構造函數,于是編譯器便認該類中沒有聲明復制構造,所以將隱士的聲明一個。這樣一來,任何對該類的復制構造的調用都將使用編譯器自己生成的。例如下面代碼

class T
{
 
public:
 T();
 T(
const T&,int);
}
;

T::T()
{}
T::T(
const T&,int=7)
{
 cout 
<< "T(const T&,int=7)"<<endl;
}



int main()
{
 T one;
 T two (one);
}


//GCC4.4中產生T::T(const T&, int)與T::T(const T&)的二義性;VC2005中則沒有產生二義性,直接調用T(const T&,int)

 

2.如果類T的每一個直接基類或虛基類的復制構造函數的第一個參數類型中含有const限定符,且對于類T中所有類類型的非靜態(tài)數據成員,當該數據成員所屬的類中的復制構造函數的第一個參數類型中含有const限定符時,T類的隱士聲明的復制構造函數的格式為T::T(const T&)。否則T類的隱士聲明的復制構造函數的格式為T::T(T&)
同時,隱式聲明的復制構造函數是inline public。同時隱式聲明的復制構造函數擁有異常說明。
P.S.: 隱式聲明的復制構造函數的參數類型中不包含volatile限定符,即只能是T& 或const T & ,不能是volatile T& 或volatile const T&

3.當類T中有隱士聲明的復制構造函數,且沒有虛函數、沒有虛基類、含有trivial復制構造函數的基類以及該類T的非靜態(tài)類類型數據成員所屬的類中有trivial復制構造函數時,則稱T的復制構造函數為trivial,否則為nontrivial

4.當隱士聲明的復制構造函數用于對該函數所屬類的對象進行初始化時將被隱士定義,即便編譯器優(yōu)化掉對復制構造函數的調用。
一個有隱士定義的復制構造函數的類T,如果滿足以下情況之一時則是不規(guī)范的:
   該T類的非靜態(tài)類類型數據成員中有不可訪問的或存在二義性的復制構造函數;
   該T類的基類中有不可訪問的或存在二義性的復制構造函數時。
在一個隱式聲明的復制構造函數被隱士定義之前,其所屬類的直接/虛基類和非靜態(tài)數據成員中隱式聲明的的復制構造函數都應完成隱式定義

5.隱式定義的復制構造函數對類中的子對象將執(zhí)行深拷貝(memberwise copy)。執(zhí)行順序與用戶自定義中基類和成員的初始化順序一樣。
執(zhí)行過程:對類對象,調用該類中的復制構造函數;對內置數據類型,調用內置的賦值操作符
另,隱士定義的復制構造函數應該只復制虛基類一次。


拷貝賦值操作符
1.類T的一個用戶定義的拷貝賦值操作符是一個非靜態(tài)非模板成員函數(模板的賦值操作符并不會阻止編譯器自行隱士生成賦值操作符函數),該函數只能有一個形參(即便多出的參數有默認實參)且形參類型是T &、const T &、volatile T &或const volatile T &之中的一個。可以存在多個賦值操作符。
如果沒有顯示的聲明拷貝賦值操作符,編譯器將隱士生成一個。同時,對于該隱士生成的拷貝賦值操作符來說,如果類T中的每一個直接基類的拷貝賦值操作符的形參類型中含有const限定符,且如果類T的所有非靜態(tài)類類型數據成員所屬類中的拷貝賦值操作符的形參類型中含有const限定符,則類T的拷貝賦值操作符的形參類型為const T &,否則為T &.
與隱士聲明的復制構造函數一樣,隱士聲明的賦值操作符是inline public。
另,因為拷貝賦值操作符的隱士聲明是在用戶沒有聲明時進行的,以及派生類的賦值操作符會隱藏基類的賦值操作符。所以,通過using聲明從派生類的基類中引入一個參數類型為該派生類的賦值操作符仍會被該派生類中隱式聲明的賦值操作符所隱藏。如下代碼:

class T;
class A
{
public:

 
void operator=(T&)
 
{
  cout 
<< "&operator=(T&)"<<endl;
 }

}
;

class T: public A
{
 
public:

 
using A::operator=;
}
;



int main()
{
 T one,two;
 one
= two;
}


//GCC4.4中輸出"&operator=(T&)",而VC2005中沒有任何輸出。說明對于“隱士聲明的隱藏由using聲明引入基類中的賦值操作符”這一行為,GCC中沒有遵守,而VC遵從了。

 

2.與復制構造函數一樣,當一個類有隱式聲明的拷貝賦值操作符,并且沒有虛函數、沒有虛基類、每一個直接基類有一個trivial拷貝賦值操作符、且所有非靜態(tài)類類型數據成員所屬的類中有一個trivial拷貝賦值操作符時,該隱式聲明的拷貝賦值操作符為trivial,否則其他情況下都為nontrivial。

3.當有用到賦值操作符時隱士聲明的賦值操作符將隱士定義。對于有隱士定義的賦值操作符的類,如果該類有const限定的非靜態(tài)數據成員、或有非靜態(tài)數據成員的引用類型、或有非靜態(tài)類類型的數據成員所屬的類中的有不可訪問的賦值操作符,或有基類中有不可訪問的賦值操作符時,是不規(guī)范的。
同時在隱士聲明的賦值操作符被隱士定義之前,該類中的所有基類以及非靜態(tài)數據成員都應該完成隱士定義。另,隱士聲明的賦值操作符有異常說明符。

4.隱士定義的賦值操作符執(zhí)行深度賦值(memberwise assignment)。對基類的賦值順序與基類派生列表中的順序一樣,而非靜態(tài)數據成員則以他們在類中定義的順序賦值。
每個子對象的賦值都是以特定的方式進行:
如果子對象為類類型,則調用其所屬類中的賦值操作符;如果是內置類型,則使用內置的賦值操作符
注意:并沒有說明隱式定義的賦值操作符對虛基類賦值幾次


參考:ISO C++ 12.8

posted on 2009-10-07 20:25 zhaoyg 閱讀(509) 評論(0)  編輯 收藏 引用 所屬分類: C/C++學習筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久青草久久| 91久久精品美女| 激情久久影院| 国内久久精品| 一区在线免费观看| 亚洲精品久久久久久久久久久久久| 一区二区三区在线免费视频| 亚洲高清不卡一区| 日韩视频免费观看| 午夜国产一区| 免费永久网站黄欧美| 亚洲电影免费观看高清| 亚洲精品免费观看| 新67194成人永久网站| 久久视频在线免费观看| 欧美精品久久久久久久| 国产欧美精品va在线观看| 一区视频在线播放| 亚洲小说欧美另类社区| 久久亚洲精品网站| 99国产精品自拍| 欧美在线免费观看| 欧美日韩理论| 国内一区二区三区在线视频| 99re66热这里只有精品3直播| 午夜久久影院| 亚洲国产一区二区三区a毛片| 欧美国产激情二区三区| 中文网丁香综合网| 久久久久国产精品一区三寸| 欧美日韩国产成人在线免费| 韩国精品在线观看| 亚洲一级高清| 欧美高清在线一区二区| 亚洲欧美中文日韩v在线观看| 久久综合五月| 国产日本欧美一区二区三区| 亚洲伦理在线免费看| 久久久99久久精品女同性| 日韩视频一区二区三区| 久久精品视频在线免费观看| 欧美日韩成人综合在线一区二区| 精品福利电影| 欧美在线观看视频在线| 日韩视频免费在线观看| 欧美刺激性大交免费视频 | 亚洲免费在线电影| 欧美精品性视频| 亚洲国产日韩欧美| 久久久久国产一区二区三区四区| 一区二区三区四区国产精品| 免费成人你懂的| 影音先锋日韩资源| 久久综合久久美利坚合众国| 亚洲欧美日韩一区在线| 国产精品入口日韩视频大尺度| 亚洲伦理久久| 亚洲国产一区在线观看| 免费h精品视频在线播放| 亚洲丶国产丶欧美一区二区三区| 久久久亚洲成人| 久久精品视频在线观看| 伊人精品久久久久7777| 欧美不卡在线| 噜噜爱69成人精品| 亚洲黑丝在线| 91久久在线| 欧美精品乱码久久久久久按摩| 亚洲美女在线观看| 日韩视频在线观看一区二区| 欧美日韩精品一区视频 | 亚洲无线观看| 999在线观看精品免费不卡网站| 欧美另类极品videosbest最新版本| 亚洲国产欧美一区二区三区同亚洲 | 久久久亚洲成人| 激情欧美一区二区三区在线观看| 久久亚洲私人国产精品va媚药| 欧美有码在线观看视频| 亚洲精品欧美日韩| 亚洲国产精品一区二区尤物区 | 亚洲精品视频免费| 亚洲高清资源| 欧美日韩在线免费观看| 亚洲欧美在线x视频| 亚洲午夜女主播在线直播| 国产精品日韩欧美一区二区三区| 性欧美超级视频| 久久久亚洲高清| 夜夜嗨av色一区二区不卡| 91久久嫩草影院一区二区| 欧美日韩国产成人精品| 欧美中文字幕视频在线观看| 久久久人成影片一区二区三区 | 99在线精品观看| 亚洲欧美伊人| 亚洲区一区二区三区| 亚洲午夜在线视频| 亚洲国内高清视频| 亚洲一区二区三区色| 有码中文亚洲精品| 一区二区三区高清不卡| 在线播放日韩欧美| 在线一区免费观看| 亚洲欧洲日本在线| 亚洲欧美在线一区| 亚洲久久视频| 久久精品99国产精品酒店日本| 99综合精品| 久久久另类综合| 午夜精品久久久久99热蜜桃导演| 久久综合一区二区三区| 欧美在线视频二区| 国产精品v欧美精品v日本精品动漫| 美女免费视频一区| 国产欧美日本一区视频| 一区二区久久久久| 91久久综合| 久久精品国产亚洲a| 午夜视黄欧洲亚洲| 欧美日韩国产在线播放网站| 免费一级欧美片在线观看| 国产伦精品一区二区三区高清版 | 亚洲欧美一区二区激情| 欧美电影美腿模特1979在线看| 久久久久成人网| 国产精品试看| 亚洲一区二区三区在线看| 一区二区三区精密机械公司| 欧美aⅴ99久久黑人专区| 蜜臀av性久久久久蜜臀aⅴ| 国产专区欧美精品| 欧美一区二区视频97| 欧美在线一级va免费观看| 国产精品国产三级国产专播品爱网 | 欧美激情一区| 国产日韩欧美91| 亚洲视频精选| 在线视频中文亚洲| 欧美精品在线播放| 亚洲精选视频在线| 亚洲一区二区三区四区在线观看| 欧美国产日产韩国视频| 亚洲国产精品久久91精品| 亚洲精品美女久久久久| 欧美另类99xxxxx| 在线亚洲高清视频| 久久成人av少妇免费| 国内精品久久久久影院薰衣草| 香蕉乱码成人久久天堂爱免费| 久久精品视频在线看| 在线精品观看| 欧美女同视频| 亚洲一区二区欧美| 久久久久久免费| 亚洲韩日在线| 欧美日韩国产三级| 亚洲一级在线观看| 久久亚洲精品伦理| 9色精品在线| 国产人久久人人人人爽| 久久嫩草精品久久久久| 最近看过的日韩成人| 亚洲欧美视频在线观看| 国产午夜精品一区二区三区欧美 | 久久人人爽人人爽| 亚洲国产小视频| 亚洲欧美中文日韩在线| 国产伊人精品| 欧美激情一区二区| 亚洲一区二区三区欧美| 免费观看亚洲视频大全| 中文国产成人精品| 韩国女主播一区| 欧美日韩一区二| 久久久久久久一区| 亚洲美女精品一区| 久久午夜精品| 亚洲制服丝袜在线| 亚洲第一精品电影| 欧美午夜在线一二页| 久久成人精品视频| 日韩一级大片在线| 欧美高清hd18日本| 久久精品女人的天堂av| 中日韩美女免费视频网址在线观看 | 欧美午夜宅男影院在线观看| 久久久久国产精品一区| 亚洲一区二区精品在线| 亚洲高清视频一区二区| 久久久久国产一区二区三区| 亚洲影院色无极综合| 亚洲精品美女| 在线日韩视频| 国产亚洲午夜| 国产精品久久久久久久久久妞妞| 模特精品在线| 久久亚洲风情| 久久免费精品日本久久中文字幕| 亚洲欧美亚洲|