Операторы присваивания C++ могут быть бесплатными функциями?

Я пробую что-то вроде этого:

Foo & operator=(Foo & to, const Bar &from);

Но я получаю эту ошибку:

E2239 'operator =(Foo &, const Bar &)' must be a member function

Есть ли ограничения на который операторы, can/cannot быть определенными как Бесплатные Функции, и если так, почему?

18
задан Roddy 21 June 2010 в 20:57
поделиться

2 ответа

Оператор присваивания должен быть нестатической функцией-членом и иметь ровно один параметр:

Оператор присваивания должен быть реализован с помощью нестатическая функция-член с одним параметром (C ++ 03 13.5.3 / 1).

operator () , operator [] и operator -> также должны быть реализованы как нестатические функции-члены.

Зависящий от класса оператор new и оператор delete (и его варианты) должны быть реализованы как статические функции-члены (обратите внимание, что они неявно статичны, даже если они не объявлены с ключевое слово static ).

24
ответ дан 30 November 2019 в 08:43
поделиться

Не может.

Причина, я думаю, связана с конструктором копирования. У них очень похожая семантика, и вы не можете определить конструктор копирования вне класса, как другой конструктор. Итак, они не хотели разлучать близнецов далеко друг от друга (чтобы избежать парадокса близнецов :).

П.С. Что позор в C ++, так это то, что вы не можете добавить члена в существующий класс. Для этого нет низкоуровневой причины. Если бы это было возможно, вы могли бы разделить зависимости заголовка и cpp, не объявляя закрытые функции в заголовке определения класса.

-1
ответ дан 30 November 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: