日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Guru of the Week 条款01: 变量的初始化

發布時間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Guru of the Week 条款01: 变量的初始化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GotW #01 Variable Initialization

著者:Herb Sutter?????

翻譯:kingofark

[聲明]:本文內容取自www.gotw.ca網站上的Guru of the Week欄目,其著作權歸原著者本人所有。譯者kingofark在未經原著者本人同意的情況下翻譯本文。本翻譯內容僅供自學和參考用,請所有閱讀過本文的人不要擅自轉載、傳播本翻譯內容;下載本翻譯內容的人請在閱讀瀏覽后,立即刪除其備份。譯者kingofark對違反上述兩條原則的人不負任何責任。特此聲明。

Revision 1.0

Guru of the Week 條款01: 變量的初始化

難度:4 / 10

(想想看,有多少種將變量初始化的方法? 千萬要注意那些看上去很像“變量初始化”的東西。)

?

[問題]

下列四條語句有什么區別嗎?

??? SomeType t = u;

??? SomeType t(u);

??? SomeType t();

??? SomeType t;

[解答]

我們按從下往上的順序逐個考察四條語句:

*?? SomeType t;

??? 變量t被缺省構造函數SomeType::SomeType()初始化。

*?? SomeType t();

??? 這是一個騙局,因為這條語句看上去很像一個變量聲明,而實際上卻是一個函數聲明;這個函數t沒有參數并且返回類型為SomeType

*?? SomeType t(u);

??? 這是直接初始化。變量t通過構造函數SomeType::SomeType(u)被初始化。

*??SomeType t = u;

??? 這是拷貝初始化。變量t通過SomeType的拷貝構造函數(Copy Constructor)被初始化。(注意,這條語句雖然含有“=”,但仍然是一個初始化操作,而不是一個賦值操作,因為在這里,允許使用'='只是為了可以沿用C語言的語法,operator=是不會被調用的。)

????[語義學參考]:如果u恰好也是SomeType類型,那么這條語句與“SomeType t(u);”是等同的,將調用SomeType的拷貝構造函數(Copy Constructor)。如果uSomeType以外的其它類型,那么這條語句與“SomeType t(SomeType(u))”是等同的。可以看到,在語句“SomeType t(SomeType(u))”里,u被轉換成一個臨時的SomeType對象,而t則是由此拷貝構造出來的。

??? [注意]:在這種情況下,編譯器通常可以(但不是必須要)對其進行優化,適當的處理拷貝構造(Copy Construction)操作(一般是省略掉拷貝構造過程)。如果進行了優化,則一定要保證拷貝構造函數(Copy Constructor)的可達性。

?

?? [學習指導]?建議總是使用“SomeType t(u)”的形式, 一來是因為只要可以用“SomeType t = u”的地方也同樣可以它;二來是因為它還有一些其它的優點,比如支持多個參數等。

轉載于:https://www.cnblogs.com/snben/archive/2012/08/27/2658939.html

總結

以上是生活随笔為你收集整理的Guru of the Week 条款01: 变量的初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。