объясните про c++
я думал что первая строка в main напечатает то, что напечатано после Expected:порядок вычисления аргументов функции не определен.
вы не видите здесь эту функцию?
вспомните сигнатуру функции<< и перепишите ваше выражение с << в терминах вызова этой функции
тогда должно стать все ясно
порядок вычисления аргументов функции не определен.функцию я вижу. а вот про "неопределён" это к одной функции относится? или к выражению?
там ведь
cout.operator<<("'").operator<<(g1.operator<<("' '").operator<<(g2.operator<<("' '").operator(g3.operator("'");
как бы я надеялся что аргументы для такой цепочки вызовов вычисляются в порядке вызовов.
это ведь не один вызов с кучей параметров, а последовательность.
cout.operator<<вот тут промашка
operator<<(operator<<(operator<<(operator<<(operator<<(operator<<(operator<<(cout,"'"g1"' '"g2"' '"g3"'").operator<<(endl);
опять же непонятно почему он не начинает вычислять параметры начиная с самого вложенного вызова
опять же непонятно почему он не начинает вычислять параметры начиная с самого вложенного вызовавот смотрим:
f(g h
вы в голове сначала g вызываете, а компиляторы легче сначала h вызвать (стандарт ему дал такую свободу)
в итоге, если всегда вычислять сначала правый аргумент, затем левый, то получим то, что напечатала ваша программа
если же вычислять сначала левый, затем правый аргумент, то будет ваш Expected
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%...
во многих соглашениях
Аргументы передаются через стек, справа налево
Короче вывод: так делать не надо.
спасибо, вроде прояснилось.
Оставить комментарий
elenangel
что-то я туплю:я думал что первая строка в main напечатает то, что напечатано после 'Expected:'
иными словами, почему выражения для оператора << вычисляются в порядке обратном его ассоциированию и в обратном от появления их в тексте программы?