Присваивание против параметризованного конструктора c

#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, а не в теле конструктора.