Здравствуйте, kov_serg, Вы писали:
BFE>>Здесь ровно тоже самое: x слева и x справа не обязаны иметь одно и тоже значение.
_>Если у меня переменная не volatile почему она имеет не одно и тоже значение?
Всё потому жеАвтор: B0FEE664
Дата: 30.07.21
.
BFE>>Скажите, kov_serg, а вы понимаете, что в выражении:
BFE>>x = 1 + x
BFE>>значения x слева и x справа имеют разные значения?
_>Тут операция явного изменения значения переменной x. Как это связано с последующим вопросом?
BFE>>Если ответ "да", то почему вы предполагаете, что в выражении "x==x" должно быть иначе?
_>А почему вы считаете что данное равенство не должно выполняться?
Смотрите, с точки зрения математики не существует такого x, что
x = 1 + x. Вы, однако, понимаете, что "Тут операция явного изменения значения переменной x.". Следовательно то, что понимается под x в программировании — это не тоже самое, что понимается под х в математике. Это совершенно разные по семантике записи не смотря на то, что по синтаксису они похожи. В частности,
x == x — это никакое не равенство. Это операция сравнения. Программа вида
int x; return x == x; означает: взять произвольное неопределённое значение и сравнить его с произвольным неопределённым значением. Стоит ли удивляться результату при такой семантике?
Здравствуйте, kov_serg, Вы писали:
_>И почему clang начиная с 5-ой версии считает что 0 будет самый раз?
Потому что Clang 5-ой версии выдаёт ошибку компиляции:
https://godbolt.org/z/dTYs8K695
У кого не выдаёт — ССЗБ.