Возвращаемый тип оператора ->

133
29 мая 2019, 02:10

Почему мне не выдает ошибок при определении, ведь оператор -> должен возвращать указатель или класс, у которого есть -> ?

struct X {
    int operator -> () {
        return 42;
    }
};

int main() {
    X x;
    x.operator->();
//    x->(); // error
}
Answer 1

Стандарт не устанавливает требований на тип, возвращаемый перегруженным оператором ->. Однако возвращение чего-то, не имеющего ->, делает невозможным вызов этого оператора как оператора (а вызов как функции все равно будет работать)

16.5.6 Class member access [over.ref]
1 operator-> shall be a non-static member function taking no parameters. It implements the class member access syntax that uses ->.
postfix-expression -> template opt id-expression
postfix-expression -> pseudo-destructor-name
An expression x->m is interpreted as (x.operator->())->m for a class object x of type T if T::operator->() exists and if the operator is selected as the best match function by the overload resolution mechanism

READ ALSO
Класс, создание объекта, конструктор

Класс, создание объекта, конструктор

Прочитал статьи, смотрю видео и заметил вот такую конструкцию:

104
Scheduled annotation

Scheduled annotation

Как использовать scheduled аннотация из спринга?допустим есть какой то метод который удаляет данные из БД MYSQL можно ли сделать так что с помощю...

132
Почему я всегда получаю 0 в Math.random() [закрыт]

Почему я всегда получаю 0 в Math.random() [закрыт]

Не понимаю почему всегда возвращает 0

99
Как нарисовать изолинии по точкам на Java?

Как нарисовать изолинии по точкам на Java?

Есть массив точек (X, Y, Высота(Z)), мне нужно изобразить изолинии по этим точкам, типа вот такого:

130