Зачем мне нужен еще один набор скобок после инициализации скобки переменной-члена?

Я пытался использовать фигурную инициализацию (что, к счастью, Visual Studio 2013 фактически поддерживает), но по какой-то причине, когда я делаю это в классе, требуется два набора фигурных скобок. Например:

class NumberGrabber {
int number;
public:
NumberGrabber() : number{ 5 }{}

int getNumber() { return number; }
};

Почему это требует от меня, чтобы сказать number { 5 }{}? Это на самом деле не имеет визуального смысла для меня.

3

Решение

Прежний набор скобок является инициализатором для numberпоследний является составным оператором, который определяет тело конструктора. При правильном форматировании это может стать понятнее.

NumberGrabber()
: number{5}
{
}

Это имеет больше смысла?

14

Другие решения

В C ++ 11 вы также можете сделать

#include <iostream>

// look ma, no {}
class NumberGrabber {
int number = 5;
public:
int getNumber() { return number; }
};

int main()
{
std::cout << NumberGrabber().getNumber() << "\n";
}

Живой пример (работает для clang и g ++), который печатает 5.

4

Конструктор — это функция, а для определения функции требуется тело. {} это пустое тело функции.

3
По вопросам рекламы [email protected]