Функция приложения ассоциируется слева

В соответствии с этот стол, Приложение функции ассоциируется слева. Что это значит? Ассоциативность важна, когда бинарный оператор появляется несколько раз, как в a - b - c, Какое это имеет отношение к применению функции? Как бы отличалось приложение функции, если бы оно ассоциировалось справа?

2

Решение

Вы неправильно поняли эту таблицу, приложение функции ассоциируется слева, а не справа.

Он вступает в игру при работе с функциями, которые возвращают другие функции.

Вот пример, где это имеет значение:

#include <iostream>

template<typename T>
T id_1(T t) {
t(1);
return t;
}

typedef void (*func)(int);

void nothing(int x) {}

func print(int x) {
std::cout << x << std::endl;
return nothing;
}

int main() {
std::cout << "left associative:\n";
id_1(print)(2);
std::cout << "right associative:\n";
id_1((print)(2));
}

Выход

left associative:
1
2
right associative:
2
1

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

Что-то вроде X(y)(z)? Может быть (X(y))(z) или же X((y)(z))? (где X, возвращаемое значение X а также y вызываемые).

6

Вызов функции является левоассоциативным. Это еще один способ сказать, что постфиксные операторы имеют более высокий приоритет, чем унарные операторы.

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