1. По умолчанию используйте "explicit" в конструкторах 2. Используйте для преобразований типов именованные функции, а не соответствующие операторы: Именно поэтому в стандартном классе "string" отсутствует operator const char*();
Исключения:
При нечастом и осторожном использовании неявные преобразования могут сделать код более коротким и интуитивно более понятным. Стандартный std::string определяет неявный конструктор, который получает один аргумент типа const char*. Такое решение отлично работает, потому что: 1. Не имеется автоматического преобразования std::string в const char*: такое преобразование выполняют c_str() и data() 2. Все операторы сравнений, определённые для std::string (например, ==, !=, <) перегружены для сравнения const char* и std::string в любом порядке.
Это позволяет избежать создания скрытых временных переменных. Но при этом возникают определённые неприятности, связанные с перегрузкой функций. void Display(int); void Display(std::string); Display(NULL); /* вызов Display(int)
|