初始化列表与静态Const初始化

时间:2013-08-24 07:46:27

标签: c++ constructor static-variables initialization-list

创建100多个newObj时的速度更快:

//initialization list
    struct struct_Obj {
    ...tonsOfVars
    struct_Obj() : tonsOfVars(init) {}
    }

或者:

//static const already constructed, call the copy constructor(?)
static const struct_Obj defaultStruct_Obj = { tonsOfVars(init) };
struct_Obj newObj = defaultStruct_Obj

TonsOfVars意味着多个不同的变量(从POD到结构/类)

我会假设静态const,因为它调用复制构造函数(意思是1操作?)vs调用初始化列表中的每个初始化程序?
虽然对此的常见反应是“描述它”,但即使这样做也不会给我一个解释为什么它更快。

2 个答案:

答案 0 :(得分:0)

这实际上取决于tonsOfVars中的类型。

  

我会假设静态const,因为它调用复制构造函数(意思是1 op?)vs调用initalization列表中的每个初始化器?

它正在为struct_Obj调用一个复制构造函数,但它仍然需要为每个字段调用复制构造函数。

如果它们都是POD数据,则根本没有区别。但是,在某些类型中,默认构造函数可能比复制构造函数更快(或更慢),因此这会产生影响。

答案 1 :(得分:0)

我认为这取决于tonsOfVars的构造函数与tonsOfVars的复制构造函数的速度,如果它们都是编译器生成或执行浅拷贝,那么我无法想到为什么初始化列表不会更快。

取决于tonsOfVars的类型,编译器的优化也可以有所作为。