Доброе временя суток друзья. На днях столкнулся с такой проблем.
while(cin >> s[n])
len[n] = len[n - 1] + 1 + s[n++].length();
Но всего проходило 0 тестов, потом же исправил на следующую запись.
while(cin >> s[n])
len[n] = len[n - 1] + 1 + s[n].length(), n++;
Получил AC. Какая разница между этими кодами? Может это из-за компиляторов? Заранее спасибо. :)
Порядок вычисления аргументов в языке C++ не фиксирован. Как следствие n++ может случится как до len[n] и len[n-1], так и после, так и между.
По моим представлениям на g++ например он случится перед.
У меня gcc, он сначала присваивает значение len[n] и только потом выполняет n++.
Ну это может меняться от версии. В любом случае вашему коду надо сделать следующий набор действий
Компилятор имеет право переставлять эти действия почти как угодно. (ну не совсем конечно, но порядок 4,5,3,2,1,6,7 вполне валиден и правдоподбен).
Ясно, все понял, спасибо большое. Надо бы избегать такие ляпы :)
http://alenacpp.blogspot.ru/2005/11/sequence-points.html
Здесь достаточно внятно и хорошо описана эта тема, то, чего следует ожидать, и чего не следует ожидать от компилятора.
Мне название сайта не нра)
Тыц