У меня есть класс, который я должен создать множество раз. Это что-то вроде этого:Инициализация членов базового класса в списке инициализаторов производного класса
class A
{
public:
A() : a1(0.0f), a2(-1) {}
float a1;
int a2;
};
class B : public A
{
B();
float b;
};
Я имею в виду 2 пути реализации CTOR из B:
B(): A(), b(0.0f) {} // Using the base class ctor.
B(): b(0.0f) { a1 = 0.0f; a2 = -1; } // Not using the base class ctor. Ugly but maybe faster?
Какой из них быстрее?
Мои типы членов являются базовыми (int, float, double ...) как в базовом, так и в унаследованном классе.
Компилятор: Intel и LLVM.
Вы пытались самим измерить время? – piokuc
@ user2280716 Согласен. Как сказал Дональд Кнут: «Преждевременная оптимизация - это корень всего зла». – michaelb958
Даже если игнорировать все соображения преждевременной оптимизации, обе версии приведут к тому же самому коду. Второй может быть даже медленнее (если игнорировать все усилия по оптимизации компилятора), потому что конструктор по умолчанию 'A' всегда будет вызываться, если вы не вызываете один из его конструкторов самостоятельно. Так что просто упущение это не помешает ему быть вызванным. И в конце концов я не думаю, что вторая даже скомпилируется, так как вы не должны инициализировать членов базового класса. –