作者loveme00835 (最愛朴素妍)
看板C_and_CPP
標題Re: [問題]怎麼設定物件陣列初始值
時間Sun Feb 20 10:09:26 2011
※ 引述《cool79518 (吃飯睡覺打東東)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 問題(Question):
: 有搜尋過板上,但是沒有我要的答案。
: ,我想給定物件陣列的初始值,如果要像一般把陣列內容的值都設0等方式要如何設定?
: 餵入的資料(Input):
: 預期的正確結果(Expected Output):
: 錯誤結果(Wrong Output):
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: http://nopaste.csie.org/8879a
: 補充說明(Supplement):
誤會大了, 陣列給初值有4種情況:
1.不給初值
Object b[ 3 ];
呼叫該類別的 trivial ctor來建構物件, 除非你寫了 default ctor
, 不然不做任何初始化動作.
2.用 trivial ctor初始化各元素
Object b[ 3 ] = {};
與(1)類似, 不過內建的數值型態都會被初始化為0.
3.所有元素都給初值
Obecjt b[ 3 ] = { Object("1"), 2, 3.0 };
每一個元素在建構時都呼叫1個參數的建構子, 用初值的型態來決定
要呼叫的版本.
4.只給部份的初值
Object b[ 3 ] = { 1 };
第0個元素以「參數為1個整數的建構子」來建構, 其餘的元素皆用
trivial ctor 來建構.( (2)跟(3)的綜合體 )
元素一多用上面的 case 3就不切實際了, 下面提出 3 種解法, 不過
語意都不太一樣.
1.使用 default ctor來建構物件, 並用靜態成員來當作初值的來源
(不推薦使用)
http://codepad.org/2Nk0txRQ
2.使用 default ctor來建構物件, 建構結束再賦予新值, 需要 copy
assignment (效率較差).
http://codepad.org/16WP8ar5
3.再來是我覺得比較好的方法, 使用 std::uninitialized_fill直接
建構物件, 不需要你硬寫 default ctor, 缺點就是要注意 new 和
delete 要成對, 以及離開前要記得呼叫解構子.
http://codepad.org/3cIgObOk
另外也可以考慮 std::allocator<T>, 要做的工作「比較」少一些.
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█
T-ara版怎麼去
████◤
██
◢██◣█
██
████
██
s ~>
T-ara
█/███
██
██
██
█/█ ◢█
██
█/█ 歡迎您的光臨
████◤
██
██
██
██◤
███◤
██◤
恩靜、
智妍、
孝敏
█/███
██
█/█
█◤
██
█/██
██
素妍、
居麗、
寶藍
████◤
█◤
◥██◤ █◤
████◤
█◤
花英 ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
推 cool79518:謝謝大大指教,可能是我程度還不夠,有看沒有懂.. 02/20 11:31
→ akasan:學習 c++ 的話, 你要看很多的書XD... 02/20 12:34
→ stupid0319:說不定連初始化設定在大學都能開兩個學分的課了 02/20 13:28
→ ru035pu4xx:不過通常初始化都被教師簡略帶過,自己看書咖實在 02/20 13:37
→ cool79518:akasan大大能推薦幾本書書給我嗎? XD 02/20 14:26
推 adxis:推還沒好建構物件XD 02/20 18:04
→ adxis:不過default ctor 很多場合很好用啊~ 02/20 18:05
@.@ 原來打錯字了
推 xatier:學習 c++ 的話, 你要看很多l大寫的文章XD 02/21 18:39
我的文沒什麼內容阿...Orz
※ 編輯: loveme00835 來自: 140.121.197.115 (02/21 18:58)