2013-08-24 3 views
0

Что быстрее при создании 100+ newObjs:Initialization Список Vs Статический Const Инициализация

//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 op?) Против вызова каждого инициализатора в списке инициализации?
Хотя общий ответ для этого - «профиль», даже это не даст мне объяснения ПОЧЕМУ это быстрее.

+0

Если мне пришлось опасаться догадки, предполагая, что tonsOfVars являются примитивами, а ваш инициализатор будет инициализироваться значениями const, я бы сказал, что конструктор по умолчанию будет быстрее. – Kindread

ответ

0

Это действительно зависит от типов в tonsOfVars.

Я бы предположил статический const, так как его вызов конструктора копирования (что означает 1 op?) Против вызова каждого инициализатора в списке инициализации?

Он вызывает один экземпляр-конструктор для struct_Obj, но ему по-прежнему нужно вызвать конструктор копирования для каждого поля.

Если все они являются данными POD, не было бы никакой разницы. Тем не менее, в некоторых типах конструкторы по умолчанию могут быть быстрее (или медленнее), чем конструкторы копирования, поэтому это будет иметь значение.

+0

Интересный вопрос о конструкторе по умолчанию -> operator = делает второй медленнее. Спасибо :) – VeNoM

+0

@VeNoM Извините, это была ошибка. Он должен просто запускать конструкторы копирования, а не 'operator ='. Опять же, это зависит от типов в 'tonsOfVars'. –

0

Я думаю, что это зависит от скорости конструктора tonOfVars против конструктора тонов tonOfVars, если они все сгенерированы или производятся мелкой копией, тогда я не могу придумать, почему список инициализации не быстрее.

Зависит от того, какие типы tonOfVars есть, вы также можете оптимизировать оптимизацию компилятора.