Есть разница между этими двумя строками кода. Первая строка,
foo obj(10.25);
явно вызывает ваш foo
конструктор, передавая 10.25
. Этот синтаксис, как правило, является вызовом конструктора.
Вторая строка,
foo obj2 = 10.25;
пытается неявно преобразовать 10.25
в объект типа foo
, что потребует использования конструктора неявного преобразования. В этом примере вы пометили конструктор explicit
, конструктор неявного преобразования недоступен, поэтому компилятор выдает ошибку.