2013-08-24 59 views
0

创建100+ newObjs时,什么是快:初始化列表Vs的静态常量初始化

//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到结构/班)

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

+0

如果我不得不冒险猜测,假设tonsOfVars是原语,并且您的初始化程序将使用const值进行初始化,那么我会说默认的构造函数会更快。 – Kindread

回答

0

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

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

它调用struct_Obj的一个拷贝构造函数,但它仍然需要为每个字段调用拷贝构造函数。

如果他们都是POD数据,那么根本没有差别。但是,在某些类型中,默认构造函数可能比复制构造函数更快(或更慢),所以这会有所作为。

+0

关于默认构造函数的有趣点 - > operator =使第二个变慢。谢谢:) – VeNoM

+0

@VeNoM对不起,这是一个错误。它应该运行复制构造函数而不是'operator ='。同样,这取决于'tonsOfVars'中的类型。 –

0

我认为它取决于tonsOfVars构造函数的速度与tonsOfVars的拷贝构造函数的速度,如果它们都是编译器生成的或者做了浅拷贝,那么我想不出为什么初始化列表不会更快。

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