Как мы можем объяснить результат выражения (++ x) + (++ x) + (++ x)?

Вот решение проблемы с конфликтами masksToBounds, оно работает для меня.

После того, как вы установили corderRadius / borderColor / shadow и т. д., установите masksToBounds как NO:

v.layer.masksToBounds = NO;
13
задан klutt 30 May 2018 в 09:43
поделиться

4 ответа

Мы объясняем это ожиданием неопределенного поведения , а не какого-либо конкретного результата. Поскольку выражение пытается изменить x несколько раз без промежуточной точки последовательности , его поведение не определено .

65
ответ дан 1 December 2019 в 17:12
поделиться

Как говорили другие, стандарты C и C ++ не определяют поведение, которое это вызовет.

Но для тех людей, которые не понимают, почему стандарты делают такое. , давайте рассмотрим "реальный" пример:

1 * 2 + 3 + 4 * 5

Нет ничего плохого в вычислении 1 * 2 + 3 перед вычислением 4 * 5 . Тот факт, что умножение имеет более высокий приоритет, чем сложение, не означает, что нам нужно выполнить все умножение в выражении перед любым сложением. На самом деле существует множество различных порядков, в которых вы действительно могли бы выполнять свои вычисления.

Если оценки имеют побочные эффекты, разные порядки оценки могут повлиять на результат. Если стандарт не определяет поведение, не полагайтесь на него .

12
ответ дан 1 December 2019 в 17:12
поделиться

Фактически не определено. C ++ явно не определяет порядок выполнения оператора, поэтому он зависит от компилятора, и этот синтаксис использовать не следует.

4
ответ дан 1 December 2019 в 17:12
поделиться

Фрагмент кода вызовет Неопределенное поведение в обоих языках C / C ++. Прочтите о точке последовательности из здесь .

3
ответ дан 1 December 2019 в 17:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: