Ваше понимание здесь ошибочно.
Во-первых, ни одна из этих функций не принимает значения - они обе используют ссылку. Таким образом, когда объект передается одному из них, конструктор не вызывается - любой передаваемый объект просто привязывается к ссылке.
Однако вызовы вашей функции передают строку C - и возникает неявное преобразование из C -строки в std :: string.
Таким образом, каждый из них создаст ВРЕМЕННУЮ std :: string нашу из C -строки "Hello".
Этот временный объект будет привязан к ссылке на const в первом случае и rval-reference-to-non-const во втором случае.
Язык гарантирует, что время жизни временной существует как минимум в течение времени жизни вызова функции.
Ни один из вызовов функций не имеет конструкции - единственная конструкция возникает, когда C -строка неявно преобразуется в экземпляр std :: string.