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