Нет, ты не можешь перегружать operator== только для встроенных типов. По правилам языка C++, хотя бы один операнд любого перегруженного оператора должен быть типа, определённого пользователем (обычно класс или структура). Поскольку char[] — это встроенный тип массива, перегрузка operator== для прямого сравнения двух массивов char[] языком не разрешена.
Это ограничение предотвращает переопределение операторов способами, которые могли бы нарушить фундаментальную семантику языка. Оно гарантирует, что встроенные типы сохраняют предсказуемое и последовательное поведение во всём коде.
Даже если бы C++ разрешал эту перегрузку, ты не должен использовать массивы char[] для строковых данных. Вместо этого используй std::string или похожие классы из стандартной библиотеки:
std::string обеспечивает безопасное и интуитивное сравнение строкoperator== для собственных строковых классов#include <string>
std::string str1 = "hello";
std::string str2 = "hello";
if (str1 == str2) {
// Безопасное, надёжное сравнение строк
}
Если ты работаешь с собственным строковым классом, ты можешь перегружать operator==, потому что твой класс определён пользователем:
class MyString {
public:
bool operator==(const MyString& other) const {
// Твоя логика сравнения
}
};
Главное: полностью избегай сырых массивов char[]. Используй std::string или классы-обёртки, которые обеспечивают правильную семантику строк и позволяют перегружать операторы там, где это нужно.
По крайней мере один операнд перегруженного оператора должен быть пользовательского типа, поэтому ты не можешь перегрузить operator== для двух массивов char[].
Новый — ещё не проверен сообществом
Вы