Возможный дубликат:
Конструктор по умолчанию с пустыми скобками
Создать экземпляр класса с или без скобок?
Программа:
class Foo
{
public:
Foo ( int bar = 1 )
{
cout << "bar=" << bar;
}
};
int main() {
cout << "0 - ";
Foo foo_0 ( 0 ) ;
cout << '\n';
cout << "1 - ";
Foo foo_1 ();
cout << '\n';
cout << "2 - ";
Foo foo_4;
cout << '\n';
return 0;
}
Выход:
0 - bar=0
1 -
2 - bar=1
Вопрос: почему пример № 1 не работает, а примеры № 0 и № 2 работают?
Foo foo_1 ();
является объявлением функции, объект не создается. Это функция называется foo_1
который не принимает параметров и возвращает Foo
объект.
Правильный способ построить объект есть
Foo foo1;
Эта концепция называется C ++ досадный разбор. Краткое описание состоит в том, что все, что можно рассматривать как декларацию, есть.
foo_1 (); другими словами, он известен как Null Intialize, вы должны знать разницу между созданием объекта и инициализацией значения.