Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Объявление функции, похожее на создание объекта

#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.

Комментариев нет:

Отправить комментарий