l + l ++ - это то же самое, что l + l? - PullRequest
0 голосов
/ 16 мая 2010

Скажите, трейлинг ++ не имеет никакого реального эффекта здесь?

Ответы [ 4 ]

16 голосов
/ 16 мая 2010

l+l++ не определено. В вашем выражении нет последовательности для разделения доступа к l и постинкременту. Он может делать все что угодно, в том числе иметь те же эффекты, что и l+l.

РЕДАКТИРОВАТЬ: вопрос и ответы на Почему `i = ++ i + 1` не определено поведение? объяснить, что такое точка последовательности, процитировать соответствующие части стандарта и предоставить ссылки. Позвольте мне еще раз процитировать:

Если не указано иное, порядок оценка операндов индивида операторы и подвыражения отдельные выражения и порядок в котором побочные эффекты имеют место, является неопределенные. 53) Между предыдущими и следующая последовательность указывает скаляр объект должен иметь свое сохраненное значение модифицируется не более одного раза оценка выражения. Кроме того, предварительное значение должно быть доступно только для определения значение для хранения.

Акцент мой.

ВТОРОЕ РЕДАКТИРОВАНИЕ: По многочисленным просьбам следующее предложение в абзаце:

Требования этого пункта должны быть выполнены для каждого допустимого упорядочение подвыражений полное выражение; в противном случае поведение не определено.

0 голосов
/ 16 мая 2010

Это будет постинкрементное l, то есть вычисление l+l и увеличение l после этого, так что это имеет некоторый эффект .. Демо-код:

#include <iostream>

int main() {
       int l = 1;
       std::cout << "l+l++ = " << l+l++ << std::endl;
       std::cout << "l = " << l << std::endl;
       return 0;
}

РЕДАКТИРОВАТЬ: Обратите внимание, что этот компилятор с предупреждением (см. ответ Паскаля ):

main.cpp: In function ‘int main()’:
main.cpp:5: warning: operation on ‘l’ may be undefined
0 голосов
/ 16 мая 2010

Имейте в виду, что многие языки не определяют порядок операндов, поэтому вы можете увидеть 2*l или 2*l+1 как результат этого выражения. В любом случае l будет на один уровень выше.

0 голосов
/ 16 мая 2010

Если у вас есть i+i++, на самом деле он действует как-то вроде i+i; i = i + 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...