Правильно перегружаем opIndexAssign
Из справочника по языку D opIndexAssign имеет подпись:
type opIndexAssign(type value, size_t index0, ...);
Каково будет значение возвращаемого значения, поскольку в нем говорится, что такие утверждения, как:
Class[1, 3] = 5;
эквивалентно:
Class.opIndexAssign(5, 1, 3);
Я не вижу использования возвращаемого значения в таких выражениях, но почему в ссылке на язык D используется вышеуказанная перегрузка, которая что-то возвращает?
Компилятор, похоже, принимает как возвращаемые, так и не пустые типы возвращаемых данных, но каков "правильный".
1 ответ
Это справедливо сказать что-то вроде int a = Class[1] = 2;
В цепочке оператора равенства это иногда делается с массивами, поэтому перегрузка это тоже позволяет.
Если вы возвращаете значение, это позволяет. Если вы вернете void, такой код не будет компилироваться. Это не является строго неправильным, но соглашение заключается в том, что присваивание должно возвращать значение, которое было назначено для разрешения такой цепочки.