[問題] C++初始化為何常使用單冒號?

作者: d630200x (DOGE)   2020-11-23 13:18:07
有看到有人說這樣效率比較好
但我自己測試來看是看不出差異(可能是我測試方式太簡單)
就我個人來說我是覺得寫在函式裡較為美觀
但是很多網路上的無論是simple code還是教學,在初始化時是比較常看到單冒號的
請問是真的效率上差很多,還是單純風格差異而已?
作者: nicknick0630 (NICK)   2020-11-23 14:06:00
一個好處是可以使用initializer list
作者: dendrobium (石斛蘭)   2020-11-23 15:18:00
ref type只能初始化,class如果default ctor 做的事情多的話也應該會有影響
作者: LPH66 (-6.2598534e+18f)   2020-11-23 15:30:00
: 後面是使用 (特定) ctor 初始化, 寫在函式裡則是初始化完之後再指定一個新東西過去, 語義上有些微的不同(大約就類似 int x = 5; 跟 int x; x = 5; 的差別)那因為前者是直接初始化, 能用一些只在這裡用的語法例如 1F 提的 initializer_list, 2F 提的 ref 初始化等
作者: protoss (天生散人)   2020-11-24 00:11:00
好像是因為初始化跟assign值是不一樣的概念(階段)?寫在冒號後頭就在初始化階段直接給值不需要再做assign...
作者: johnjohnlin (嗯?)   2020-11-24 02:30:00
用冒號初始化的先後順序很常常被標準陰......
作者: LPH66 (-6.2598534e+18f)   2020-11-24 05:34:00
順序的問題只要記得一定是宣告順序就好我個人會習慣寫這個冒號列表時就照宣告順序寫這樣不會亂
作者: tinlans ( )   2020-11-24 07:31:00
冒號後面 call constructor,大括號裡面就是 assignment沒寫在冒號那邊,就多 call 一次 default constructorconst data member 你也沒辦法在大括號裡面才賦值
作者: Killercat (殺人貓™)   2020-11-24 21:33:00
主要是成員變數如果是const或者reference的話,這是唯一的初始化跟賦值手段

Links booklink

Contact Us: admin [ a t ] ucptt.com