Я знаю, что это глупо и безобразно, но я перенесу некоторый код автоматически. Мой исходный язык допускает неявное преобразование между строками и целыми числами, и, например, это разрешено:
var = "hello " + 2
print(var) # prints "hello 2"
Как я могу в C ++ перегрузить оператор + для const char*
а также int
? Я получаю ошибку:
ошибка: ‘std :: string operator + (char * const&, int) ‘должен иметь
аргумент класса или перечислимого типа
Чтобы юридически перегрузить оператор, по крайней мере, один из задействованных операндов должен быть пользовательский тип. Так как ни char*
ни int
является определяемые пользователем, то, что вы пытаетесь достичь, невозможно.
Это то, что вы пытаетесь сделать, намеренно и явно запрещено в стандарте. Тебе не кажется, что это будет странно, если вдруг 1+3 = 42
потому что кто-то «умный» определил перегрузку для operator+(int, int)
?
13.3.1.2p1-2
Операторы в выражениях[over.match.oper]
Если ни один операнд оператора в выражении не имеет типа, который является классом или перечислением, предполагается, что оператор является встроенным оператором и интерпретируется в соответствии с разделом 5.
Если любой из операндов имеет тип, который является классом или перечислением, может быть объявлена пользовательская функция оператора, которая реализует этот оператор, или может потребоваться пользовательское преобразование для преобразования операнда в тип, подходящий для встроенного оператора. в операторе.
( Заметка: Формулировка одинакова в обоих C ++ 03, и следующий пересмотр стандарта; C ++ 14 )