LINUX.ORG.RU

Вопрос по стандартам синтаксиса C++

 , , ,


1

2

Навеяно i++ + i++

Вот есть int a = 1 и int b = 3. Какой результат должен быть у a+++b? 4 или 5? Иными словами, компилятор должен воспринимать это как (a++) + b или как a + (++b)?


Правильный ответ: есть очень мало мест, где оператор инкримента/декремента имеет смысл использовать в составе более сложного выражения, и данный случай не один из них. Если хочется написать такой код, его надо стереть, и написать более читаемый. «i++ + i++» - это чушь.

seiken ★★★★★
()
Ответ на: комментарий от utf8nowhere

Было бы очень странно, если бы парсер отрабатывал как + ++, нарушая приоритеты, описанные в стандарте. Иными словами это абсолютно связанные вещи.

ПыСы. Не строй из себя самого умного, тебе явно не идет, клоун))

PRN
()
Последнее исправление: PRN (всего исправлений: 1)

Выражение a+++b будет представлено как четыре токена: a, ++, +, b, т.е. компилятор должен воспринять это как (a++) + b.

Разумеется, так писать не стоит, лучше прямо писать то, что тебе нужно: (a++) + b, если уж так хочется засунуть ++ в выражение.

Что же касается стандарта, то тут, в зависимости от другой части выражения может быть UB.

Например, a = ++a + 1 это UB, a[i++] = i это тоже UB, эти примеры процитировал из стандарта С11. А все потому, что тут нет строго порядка вычисления этих выражений (согласно стандарту), и в зависимости от порядка вычисления могут быть разные side effects.

soomrack ★★★★
()