#c #constructor
#c #конструктор
Вопрос:
Какой из следующих методов лучше (используется для класса A или класса B)? Будет ли компилятор выполнять оптимизацию для класса A и функции foo1?
(Когда я задал этот вопрос одному из моих коллег, он говорил о стеке, который я не понял. может кто-нибудь, пожалуйста, объяснить это или указать мне ссылку, которая объясняет это подробно?)
#include "stdafx.h"
class A
{
public:
A::A(){}
A::~A(){}
int a;
int b;
int c;
};
void foo1()
{
A objA;
objA.a = 1;
objA.b = 2;
objA.c = 3;
}
//
class B
{
public:
B::B(int ia, int ib, int ic):a(ia), b(ib), c(ic){}
B::~B(){}
int a;
int b;
int c;
};
void foo2()
{
B objB(1,2,3);
}
Комментарии:
1. Результаты, вероятно, будут зависеть от компилятора. Единственный способ узнать это — самостоятельно сравнить обе альтернативы.
2. После устранения ошибок вашего компилятора оказывается, что это не имеет значения . В общем, измеряйте, а не угадывайте.
3. На практике напишите максимально чистый рабочий код, затем профилируйте и оптимизируйте по мере необходимости. В качестве еще одного практического примера переменные-члены должны инициализироваться в списке инициализаторов ctor, а не в теле конструктора.