Предположим, что следующий фрагмент кода:
#include <iostream>
using namespace std;
char one()
{
cout << "one\n";
return '1';
}
char two()
{
cout << "two\n";
return '2';
}
int main(int,char**)
{
// 1:
cout << one()
<< '\n'
<< two()
<< '\n';
// 2:
operator<<(
operator<<(
operator<<(
operator<<(
cout,
one()),
'\n'),
two()),
'\n');
}
выполнение строк, помеченных как 1
и 2
, скомпилировано с ideone, делает следующее:
two
one
1
2
С моей точки зрения, здесь мы наблюдаем неуказанное поведение, поскольку порядок, в котором разрешены аргументы функции, не указан.
Это был вопрос на собеседовании, чтобы напечатать выше заданную последовательность (без каких-либо альтернатив), был правильным ответом, но действительно ли это правильно?