Как перегрузить оператор + для const char * и int

Я знаю, что это глупо и безобразно, но я перенесу некоторый код автоматически. Мой исходный язык допускает неявное преобразование между строками и целыми числами, и, например, это разрешено:

var = "hello " + 2
print(var) # prints "hello 2"

Как я могу в C ++ перегрузить оператор + для const char* а также int? Я получаю ошибку:

ошибка: ‘std :: string operator + (char * const&, int) ‘должен иметь
аргумент класса или перечислимого типа

0

Решение

То, что вы просите, является незаконным

Чтобы юридически перегрузить оператор, по крайней мере, один из задействованных операндов должен быть пользовательский тип. Так как ни char* ни int является определяемые пользователем, то, что вы пытаетесь достичь, невозможно.

Это то, что вы пытаетесь сделать, намеренно и явно запрещено в стандарте. Тебе не кажется, что это будет странно, если вдруг 1+3 = 42 потому что кто-то «умный» определил перегрузку для operator+(int, int)?


Что говорит Стандарт? (n3337)

13.3.1.2p1-2 Операторы в выражениях [over.match.oper]

Если ни один операнд оператора в выражении не имеет типа, который является классом или перечислением, предполагается, что оператор является встроенным оператором и интерпретируется в соответствии с разделом 5.

Если любой из операндов имеет тип, который является классом или перечислением, может быть объявлена ​​пользовательская функция оператора, которая реализует этот оператор, или может потребоваться пользовательское преобразование для преобразования операнда в тип, подходящий для встроенного оператора. в операторе.

( Заметка: Формулировка одинакова в обоих C ++ 03, и следующий пересмотр стандарта; C ++ 14 )

10

Другие решения


По вопросам рекламы [email protected]