Нет, если класс имеет конструктор с одним аргументом, он неявно конвертируется из типа его аргумента.
Что касается других ваших вопросов:
- Может ли оператор приведения вызываться неявно?
Да, когда это необходимо.
- Если для класса определены как конструктор с одним аргументом, так и оператор приведения с одним и тем же типом, то имеет ли одно преимущество над другим или оно неоднозначно?
Мне не очень понятно, о чем вы спрашиваете, но если преобразование может пойти в любую сторону, это неоднозначно.
- Если вы решили, что хотите, чтобы класс был конвертируемым в данный тип, какой подход лучше или вы должны предоставить оба?
Вы должны использовать приведение - конструкторы этого не делают.
В общем, если вы не хотите автоматических преобразований из класса в другие типы (и в большинстве случаев это не так), лучше предоставить именованные функции преобразования (ToString, ToInt, ToX), которые никогда не будут вызываться автоматически компилятором.
, который приводит к вашим двум другим вопросам:
- Если у вас есть контроль над двумя классами, которые вы хотите сделать конвертируемыми друг в друга и друг от друга, есть ли предпочтительный способ с точки зрения этих двух операций выполнить это?
Да, использовал именованную функцию для выполнения хотя бы одного из преобразований. std :: string делает это - есть преобразование из char * в строку с использованием конструктора, но другим способом вам нужно использовать именованную функцию c_str ().
- Можно ли пометить оператор преобразования как явный?
К сожалению, нет.