что именно эта линия делает
Это создает временный X
, стоимость инициализации его вызвав конструктор по умолчанию, а затем использует это, чтобы инициализировать Y
переменную, вызывая конструктор преобразования const X&
.
где подключение к раздосадовать разборе
Если вы должны были попытаться написать это с помощью старой школы инициализации синтаксиса
Y y (X());
тогда так называемый «самый раздражающий синтаксического анализа» интерпретирует это как функцию, а не переменную, декларация: функцию с именем y
, с типом возврата Y
и единственным параметром, тип которого является (указателем на функцию), возвращающим X
.
Вы можете добавить дополнительные скобки, так что она не может быть истолковано как объявление функции:
Y y ((X()));
или, так как C++ 11, вы можете использовать скобки инициализацию, как ваш пример делает.