Спецификатор const не должен влиять на возвращаемое значение функции преобразования
Это действительно не влияет, но это также не имеет значения.
Что это влияетэто аргумент, который является неявной ссылкой на this
.Неявный аргумент является константным значением для константных функций-членов и неконстантным для неконстантных функций-членов.Аргументы - это то, что влияет на разрешение перегрузки.
В исходном коде аргументы как конструктора, так и оператора преобразования одинаковы, поэтому последовательность преобразования из любого типа в любой из аргументов одинаково предпочтительна и, следовательно, неоднозначна.
Безconst, ваше неконстантное выражение lvalue f
не требует каких-либо преобразований, в то время как конструктор требует преобразования в const lvalue.Таким образом, оператор предпочитает разрешение перегрузки.Если бы вы написали const From f;
, тогда вместо этого был бы выбран конструктор с аргументом const, так как в этом случае оператор неконстантного преобразования даже не был бы допустимым кандидатом.