[问题] 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