Re: [问题] constructor assignment与initializer

楼主: wawi2 (@@)   2017-11-05 11:48:25
我猜你要问的是在constructor内对成员赋值的两种做法
1. 是使用initializer list
2. 在ctor内使用assignment
基本上使用initializer list会有较高的效率
因为在建构一个物件时 其成员的constructor也会被呼叫
而使用initializer list可以在成员的constructor被呼叫之时即赋值
如果使用2的方法 compiler做的事情是对成员呼叫其contructor 然后又再assign新值
因此2的方法效率会较低
P.S. 这个讨论的范围是该成员是一个class 若成员均是primitive type
那么1跟2的做法效率就差不多
※ 引述《ab18282099 (poppopjack)》之铭言:
: 开发平台(Platform): (Ex: Win10, Linux, ...)
: Win10
: 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
: VC++
: 额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
: 问题(Question):
: 小弟有以下疑惑:
: C++的constructor可以用assignment和initializer两种写法,不知道有没有大神能够解释或是说明什么情况用initializer较佳或assignment较佳,感谢!
: 喂入的资料(Input):
: 预期的正确结果(Expected Output):
: 错误结果(Wrong Output):
: 程式码(Code):(请善用置底文网页, 记得排版)
: 补充说明(Supplement):
:
作者: uranusjr (←這人是超級笨蛋)   2017-11-05 14:39:00
可是如果是简单的 this.foo = new Foo; 应该会满足 copyelision 条件, 编译器会把多余的那个 copy 省掉
作者: kyuudonut (善良老百姓)   2017-11-05 20:21:00
我记得变量若是 const,则不能用 assignment 做初始化?
作者: loveflames (咕啾咕啾魔法阵)   2017-11-05 22:29:00
ref也不行

Links booklink

Contact Us: admin [ a t ] ucptt.com