Я был бы очень признателен, если бы кто-то мог дать разъяснения относительно последовательности побочных эффектов для операторов присваивания в C ++ 11.Например, укажите мне на соответствующий стандартный текст, который имеет к нему отношение.
На странице порядок оценки на cpprefence.com указано следующее относительно заданий:
8) Побочный эффект (модификация левого аргумента) встроенного оператора присваивания и всех встроенных составных операторов присваивания упорядочивается после вычисления значения (но не побочных эффектов) как левого, так и правого аргументов и являетсяпоследовательность перед вычислением значения выражения присваивания (то есть перед возвратом ссылки на измененный объект)
Что подразумевается под "(но не побочными эффектами)? Являются ли побочные эффекты не секвенировано , секвенировано внутри последовательности или секвенировано после модификации левого аргумента (или, возможно, даже секвенировано после возврата ссылки?
В качестве примера, когда операции постинкрементного преобразования выполняются в: while (* tgt ++ = * src ++);
Кажется яснымИсходя из порядка оценки , сначала выполняются вычисления значений, поэтому сначала вычисляются *tgt
и *src
.Но известно ли, когда возникают постинкрементные побочные эффекты?
Редактировать # 1:
Неопределенное поведение и точки последовательности , насколько я понимаюне отвечай на мой вопрос.Фактически, это было начало моего спуска в «кроличью нору», которое в итоге привело меня к cppreference.com
.Что я конкретно хочу знать, так это определение секвенирования побочных эффектов для оператора присваивания в C ++ 11.Ответ на вопрос в Неопределенные точки поведения и последовательности - это связь между секвенированием и понятиями undefined
, unspecied behaviour
и impementation specific behaviour
.Что, кстати, очень хорошо отвечает.
Конец правки # 1
С уважением