Выражение A(1)
является значением r * 5.2.3 [expr.type.conv].
При инициализации ссылки const
(аргумент функции) с выражением, котороеэто rvalue , компилятор может создать временное и скопировать значение этого выражения во временное и связать эту ссылку с этим временным.8.5.3 [dcl.init.ref] / 5.
[...] Конструктор, который будет использоваться для создания копии, должен вызываться независимо от того, выполняется ли копия на самом деле.
Обратите внимание, что это поведение связано с изменением в следующей версии C ++.В новом стандарте ссылка const
, инициализированная из класса prvalue , должна быть привязана непосредственно к объекту ссылки;В этом случае нельзя создавать временные объекты, а конструктор копирования не используется или не требуется.