Когда работаешь с объектами класса в C++, синтаксис List x; и List x(); создают совершенно разные вещи.
List x; объявляет локальный объект типа List. Это создаёт реальный экземпляр класса, который можно сразу использовать:
void f() {
List x; // Создаёт объект List с названием x
x.doSomething(); // Можно вызывать методы класса
}
List x(); объявляет функцию с названием x, которая возвращает объект List. Это не создаёт экземпляр — это просто объявляет сигнатуру функции:
void g() {
List x(); // Объявляет функцию, не объект
// x — это указатель на функцию, его нельзя использовать как объект List
}
Это различие критично, потому что:
List x; у тебя есть экземпляр объекта, готовый к использованию прямо сейчасList x(); у тебя есть объявление функции, которую нужно вызвать отдельно, чтобы получить объект Listx как объект, когда ты имел в виду объявить функцию, вызовет ошибки компиляцииЧтобы избежать путаницы и убедиться, что ты создаёшь именно экземпляр объекта, используй прямую инициализацию List x;. Если нужно передать аргументы конструктору, используй скобки напрямую: List x(arg1, arg2); или современный синтаксис uniform initialization: List x{arg1, arg2};
Объявление List x; создает экземпляр объекта, на котором сразу можно вызывать функции-члены, а List x(); объявляет сигнатуру функции без создания объекта.
Новый — ещё не проверен сообществом
Вы