2015-09-11 3 views
1

У меня есть 2 вопроса.
рассмотреть этот код:приоритет приращения и добавления операторов, cpp

int x=1,y=2; 
int z =(x++)+(++y); 
int w = (++x)++; 
cout << z << "\t" << w << "\t" << x; 

Теперь, это дает мне 4, 3 и 4, и я предполагаю, что w=3 потому, что это int w = (++x)++ не определено поведение, и это хорошо со мной. Что я не понимаю, так это: я попытался написать эту строку int w = (++x)++; вот так int w = ++x++; и получил error: lvalue required as increment operand, но я увидел here, что постфикс имеет приоритет над префиксом, поэтому почему это не пошаговое приращение, возвращает переменную и затем увеличивает его с помощью префикса? (как это делается при использовании кронштейна)

Вернитесь к этой строке: int z =(x++)+(++y). Я попытался написать его как int z =x+++++y, и это не сработало - такая же ошибка. Тогда я попытался int z =x+++(++y), и это было хорошо, так что я думаю, что произошло это:

  1. х ++
  2. ++ у
  3. аддитивные

но если я правильно, почему скобки были нужны? это так, как должно быть по приоритету

+1

.. и почему вы это делаете? –

+0

@ KarolyHorvath для лучшего понимания – CIsForCookies

+0

Здесь не о чем говорить, просто ПОЖАЛУЙСТА, никогда не делайте этого! –

ответ

4

так почему не приращение постфикса сделано, возвращает переменную

Постфиксный вариант не возвращает ссылку, она возвращает значение - и приращение Приставка может работать только с Справка.

При добавлении скобок вы изменили порядок оценки.

-2

Это не проблема приоритета, но способ компилятора анализирует код. Для правильной компиляции вам не нужно использовать скобки. Будет отлично работать с пробелами.

+0

Пробовал компилировать его без скобок и получил ошибки (int w = ++ x ++; -> дал ошибку) – CIsForCookies

+0

@CIsForCookies Вы пытались добавить пробелы между операторами? 'z = x ++ + ++ x;'? – Barmar

+0

@Barmar линия, которую вы предложили, отлично работает с пробелами. Линия, о которой я упоминал в предыдущем комментарии, не – CIsForCookies

Смежные вопросы