Мой вопрос заключается в том, как следующую строку можно проанализировать как объявление функции:
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
Я понимаю большинство деталей самого неприятного синтаксического анализа и почему второй временный итератор может быть интерпретирован как тип, который является функцией, возвращающей итератор и не принимающей аргументов, но я не понимаю, почему первый временный итератор можно интерпретировать как тип. Какой тип он представляет? Я думаю, что это будет какой-то тип функции, но я не могу понять, как используется имя cin
. Он объявляет, что параметр является istream_iterator
с именем cin
? Если да, то означает ли это, что вы можете произвольно заключать в скобки имена аргументов функций? И если да, то почему?