Я все еще на пути к просветлению в C ++, так что терпите меня ...
Предположим, у меня есть структура:
struct MyThing
{
int a, b;
};
Мне хочется создать его, используя сокращение в стиле c, рис.1:
MyThing mt = { 1, 2 };
Тогда предположим, что я решил внедрить метод где-нибудь в моей структуре, и (будучи таким человеком), я чувствую, что структуры не очень подходят методам, поэтому превратите его в класс:
class MyThing
{
public:
int a, b;
int sum()
{
return a + b;
}
};
Мой рис.1 по-прежнему работает нормально - все чертовски дорого. Тогда я решаю, что в конечном итоге мне понадобится приватный метод и член:
class MyThing
{
private:
int c;
void swap() {
c = a;
a = b;
b = c;
}
public:
int a, b;
int sum()
{
return a + b;
}
};
В этот момент список инициализации в стиле c на рисунке 1 не компилируется (в любом случае в VS) с «неагрегаты не могут быть инициализированы списком инициализаторов» - что хорошо объясняется здесь: http://msdn.microsoft.com/en-us/library/0s6730bb(v=vs.71).aspx
Итак, я переключаюсь на:
class MyThing
{
private:
void swap() {
int c = a;
a = b;
b = c;
}
public:
int a, b;
MyThing (int _a, int _b) : a(_a), b(_b) {}
int sum()
{
return a + b;
}
};
затем измените Рис.1 на (Рис.2)
MyThing mt(1, 2);
Оооочень, после всего этого мой вопрос: есть ли какая-то польза от использования списков инициализации в стиле c (то есть они быстрее?) Для создания вещей? Или это будет так же хорошо в первую очередь иметь:
struct MyThing
{
int a, b;
MyThing(int _a, int _b) : a(_a), b(_b) {}
};
И использовать это как рис.2 с самого начала? Есть ли какой-либо удар по производительности (даже если он незначительный)?
Спасибо!