次のコードを想定します。
#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
私の見解では、関数の引数が解決される順序が指定されていないため、ここで観察される動作は指定されていません。
これはインタビューでの質問で、上記のシーケンス (代替なし) を印刷するのが正解のはずでしたが、本当に正しいのでしょうか?