Я создаю свой собственный класс для String
, использующий C ++ исключительно для учебных целей.
И я застрял на месте, где я должен принять решение.Позвольте мне объяснить этот вопрос.
У меня есть два варианта моего класса.Я опубликую ниже только соответствующие части кода, потому что я не хочу отвлекать вас от моей проблемы под рукой.Если вам нужна дополнительная информация, я с радостью предоставлю ее.
Опция 1
class String {
size_t _length;
char* _stringHead;
public:
String(const std::string&);
String(const char*);
String(const char);
};
String operator+(String, const String);
const bool operator==(const String, const String);
const bool operator!=(const String, const String);
const bool operator<(const String, const String);
const bool operator<=(const String, const String);
const bool operator>(const String, const String);
const bool operator>=(const String, const String);
Опция 2
class String {
size_t _length;
char* _stringHead;
public:
//irrelevant part of code in Option 2
String(const std::string&);
String(const char*);
String(const char);
//irrelevant part of code in Option 2
};
String operator+(String, const String&);
const bool operator==(const String&, const String&);
const bool operator!=(const String&, const String&);
const bool operator<(const String&, const String&);
const bool operator<=(const String&, const String&);
const bool operator>(const String&, const String&);
const bool operator>=(const String&, const String&);
//for std::string
String operator+(String, const std::string&);
const bool operator==(const String&, const std::string&);
const bool operator!=(const String&, const std::string&);
const bool operator<(const String&, const std::string&);
const bool operator<=(const String&, const std::string&);
const bool operator>(const String&, const std::string&);
const bool operator>=(const String&, const std::string&);
String operator+(const std::string&, String);
const bool operator==(const std::string&, const String&);
const bool operator!=(const std::string&, const String&);
const bool operator<(const std::string&, const String&);
const bool operator<=(const std::string&, const String&);
const bool operator>(const std::string&, const String&);
const bool operator>=(const std::string&, const String&);
//for std::string
//the same goes for char* and char
...
//the same goes for char* and char
Итак, как вы можете видеть из Вариант 1 и Вариант 2 указывает, что решение здесь заключается в том, использовать ли неявное преобразование типов, которое выполняется с помощью конструкторов, или вводить каждую утилиту отдельно для каждого типа, с которым я хочу свой String type to work.
Насколько я сейчас вижу, преимущество использования первого подхода состоит в том, что его легче внедрить и поддерживать.Хотя второй подход может дать лучшие результаты производительности.
Я хотел бы получить конструктивные аргументы, какой подход лучше и в каких сценариях и какой подход, следовательно, вы бы использовали.Я думаю, что самая большая часть, которая меня интересует, это то, является ли выигрыш в производительности второго подхода разумным.