Что вы подразумеваете под ассоциативностью слева направо в этом случае?

Я читал об операторе ‹‹ в C++ из C++ Primer.
В нем есть несколько строк, написанных об операторе ‹‹.

cout ‹‹ "Некоторая строка" оценивается как левый оператор ostream, который является результатом выражения самого объекта cout. (Мы говорим, что оператор связывает слева направо) .

Было бы здорово, если бы кто-нибудь объяснил, что означают вышеупомянутые строки.


person Pratik Singhal    schedule 08.02.2014    source источник
comment
Это означает, что он работает противоположным образом оператору присваивания, который начинает оценку справа, как в x = y = z = 5;.   -  person Etherealone    schedule 08.02.2014


Ответы (2)


Ассоциативность слева направо означает, что выражение неявно заключено в скобки следующим образом:

(((cout << "foo") << "bar") << "baz")

Другими словами, самая левая операция выполняется первой.

Напротив, присваивание является правоассоциативным в большинстве языков:

a = b = c + 5;

присваивает c + 5 как "a", так и "b", потому что оператор присваивания работает справа налево.

person Pointy    schedule 08.02.2014

Это означает, что

cout << a << b

такой же как

(cout << a) << b

нет

cout << (a << b)

Чтобы уточнить: часть cout << a выводит a, а затем возвращает cout, поэтому результат (cout << a) можно использовать как левую часть для << b. Левая ассоциативность просто означает, что если скобки могут означать что-то другое, предположим, что скобки установлены слева направо.

person Guntram Blohm    schedule 08.02.2014