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