«Приоритет» вводит в заблуждение.В общем случае он имеет мало общего с порядком оценки (что происходит первым), но вместо этого определяет, какой операнд каждого оператора используется для оценки.Но давайте рассмотрим ваш пример.
*(b++) = 5;
Это означает, что 5
должно быть присвоено lvalue слева.А начиная с C ++ 17, мы знаем, что 5
оценивается полностью до *(b++)
.До этого они могли оцениваться в любом порядке.
Теперь b++
имеет значение "приращения b
, но оценивается как его предыдущее значение".Так что b++
может привести к тому, что приращение произойдет до назначения, да, но значение (b++)
является адресом до приращения.И именно поэтому b
обновляется, чтобы указывать на следующий элемент, изменяя текущий, в одном выражении.