#cpp
class Test { }; int main(int argc, char* argv[]) { Test t(); // Что делает этот оператор return 0; }
Ответы
Ответ 1
Это частный пример явления, известного в С++ под именем "most vexing parse". В ситуациях, когда в объявлении возникает неоднозначность между определением объекта и объявлением функции, эта неоднозначность в С++ разрешается в пользу объявления функции. В вашем случае имеет место простейший пример именно такой неоднозначности. В соответствии с вышеприведенным правилом, данное объявление трактуется как объявление функции t, не имеющей параметров и возвращающей значение типа Test. Для определения именно объекта c выполнением value-инициализации можно воспользоваться современным (С++11 и далее) синтаксисом униформной инициализации, который не страдает от этой неоднозначности Test t{}; Хотя в случае именно вашего (т.е. "пустого") класса Test явный инициализатор не имеет никакого значения вообще и можно просто написать Test t;Ответ 2
Как я понимаю это объявление функции с прототипом Test t(); в зоне видимости main.
Комментариев нет:
Отправить комментарий