2013-09-28 4 views
1

следующий код дает эту ошибку:ошибка: именующее требуется в качестве приращения операнда

int main() 
{ 
    int i = 4, j=10; 
    int k, l; 

    k = ++ (++ i); 
    l = (j++) ++; 

    cout << "k : " << k << endl; 
    cout << "l : " << l << endl; 

    return 0; 
} 

Это будет очень полезно, если кто-нибудь может объяснить, почему происходит эта ошибка.

+0

Я вижу, что сезон колледжа начался снова. Обе строки - это неопределенное поведение **. Но так как вы никогда не будете писать такой код в реальной жизни, почему зачем спрашивать. Не пишите такой код. –

+0

@ Loki One просто плохо сформирован. Другой всегда был неопределенным поведением, но я не уверен, что это сейчас; правила изменены в C++ 11. Я согласен с тем, что этого никогда не следует делать. –

ответ

2

Потому что, когда вы пишете X ++, X должен быть переменной, X должен быть тем, что вы увеличиваете. Таким образом, (j++) ++ является ошибкой, потому что (j++) не является переменной. Просто напишите j += 2.

Примечание для опытных программистов, я знаю, что это простое упрощение.

+0

Ваше сообщение косвенно говорит: '(++ i)' является переменной – P0W

+0

@ P0W Как так? Я только упомянул j ++ not ++ i. – john

+0

@john Поскольку '(++ i) ++' не является ошибкой, и единственный способ предложить это может быть возможным, если '++ i' является переменной. –

5

Результатом j++ является старое значение j, а не ссылка на j. Вы не можете применить к нему еще один приращение, потому что вы не можете увеличивать значения.

+1

(В то время как '++ i' приращает' i' и возвращает ссылку на эту переменную, поэтому вы можете увеличивать ее снова, но использование нескольких операторов приращения на одной и той же вещи может вызвать проблемы, и это действительно лучше не делать.) –

+1

И это применяется только для скалярных типов. Если вы пишете свой собственный класс и перегружаете 'operator ++ (int)', '(j ++) ++;' может быть законным. – jrok

2

Просто напишите j + = 2. Почему вы используете оператор ++ неправильно? Применить KISS.

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