Следующее правило применяется для неоднозначности между переменными и функциями: если это выглядит как функция, это функция.
На основе: Справочника C ++
In в случае неоднозначности между объявлением переменной с использованием синтаксиса прямой инициализации и объявлением функции компилятор всегда выбирает объявление функции; см. прямую инициализацию.
Ваш «вызов»:
Dog myDoggy();
Похоже на функцию с именем «myDoggy», которая возвращает экземпляр Dog
и не принимает никаких параметров. Такая ситуация возникает, когда вы пытаетесь создать объект с помощью конструктора по умолчанию и настаиваете на упоминании пустой круглой скобки.
Существует несколько способов создать экземпляр класса:
Dog myDoggy; // The easiest way.
Dog myDoggy({}); // Only if the constructor is not `explicit`.
Dog (myDoggy); // Same as the first one.
Dog (myDoggy)({}); // Same as the second one.
Все вышеперечисленное приведет к одинаковому результату, запомните их, чтобы не сбивать вас с толку в будущем. Есть некоторые ошибки, причиной которых является неправильное понимание вышеупомянутых способов объявления экземпляра.