Я пытался использовать фигурную инициализацию (что, к счастью, Visual Studio 2013 фактически поддерживает), но по какой-то причине, когда я делаю это в классе, требуется два набора фигурных скобок. Например:
class NumberGrabber {
int number;
public:
NumberGrabber() : number{ 5 }{}
int getNumber() { return number; }
};
Почему это требует от меня, чтобы сказать number { 5 }{}
? Это на самом деле не имеет визуального смысла для меня.
Прежний набор скобок является инициализатором для number
последний является составным оператором, который определяет тело конструктора. При правильном форматировании это может стать понятнее.
NumberGrabber()
: number{5}
{
}
Это имеет больше смысла?
В 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.
Конструктор — это функция, а для определения функции требуется тело. {}
это пустое тело функции.