Почему C++ Не требует, чтобы перегрузка оператора была «статической»?
Если вы сделаете перегруженную функцию оператора статической, у нее не будет доступа к this
. Нужно получить доступ к внутри перегруженной функции, так как обычно функция меняет состояние this
.
Вы можете сделать перегруженную функцию оператора static
, если вам не нужен доступ к этой функции, которая по существу означает, что вы не управляете состоянием объекта, на который была вызвана функция оператора. Таким образом, это непротиворечивое, но не обычное или по существу желание.
Выполнение глобальной перегруженной функции оператора static ограничило бы область действия функции оператора одним и тем же файлом.
Учитывая, что оба вышеперечисленные, компилятор не применяет перегруженные функции оператора к статическому, поскольку принудительное выполнение этого не обеспечит никаких реальных преимуществ или удобства, а не обеспечивает их равноценность.
Почему C# обеспечивает перегрузку оператора как «статического»?
This объясняет это намного лучше, чем я могу.
Каковы преимущества и недостатки?
Ну, ответ на первый вопрос действительно говорит о том, что можно сделать перегруженную функцию оператора статическим &, что объясняет преимущество/disdvantage.
перегруженных оператора может быть статическим в C++. –
И даже если оператор не статичен, не мешает, чтобы каждый объект имел свою собственную копию * кода * –
@Neil: я не сказал, что это не может быть «статическим», все, что я спрашивает, почему компилятор не делает это «статическим», как C# .. – Sherif