Конструкторы добавляют неявное преобразование. Чтобы подавить это неявное преобразование, необходимо объявить конструктор с явным параметром.
В C ++ 11 вы также можете указать «оператор типа ()» с таким ключевым словом http://en.cppreference.com/w/cpp/language/explicit При такой спецификации вы можете использовать оператор в терминах явных преобразований и прямой инициализации объекта.
P.S. При использовании преобразований, определенных BY USER (через конструкторы и оператор преобразования типов), допускается использование только одного уровня неявных преобразований.
Но вы можете комбинировать эти преобразования с другими языковыми преобразованиями
- вверх по интегральным разрядам (char до int, float до double);
- стандартные преобразования (int в double);
- конвертировать указатели объектов в базовый класс и в void *;