Re: Кто виноват ясно. Теперь что делать :)
От: Erop Россия  
Дата: 17.12.07 22:37
Оценка: 1 (1) :)
Здравствуйте, mcast, Вы писали:

M>Хотелось бы узнать корректность подобной записи ++a++?


Ты уверен, что это С/С++?

Если да, то подробности очень простые
1) Тот кто проводит это собеседование лох
2) Он считает, что ты тоже лох

ИМХО возможных адекватных реакций, для чувака знающего язык две:
1) Сказать, что это не скомпилируется, а если расставить скобочки, чтобы скомпилировалось, то может делать что угодно. Сообщить, что ты считаешь неуважением к себе подобного уровня вопросы и если он продолжит задавать подобные глупые вопросы, то к UB перейдёшь уже ты, например оденешь бумажку с собеседованием ему на голову. При повторении подобной провокации угрозу прийдётся воплотить в жизнь

2) Уточнить зачем это у тебя спросили, и если действительно потому, что они любят издеваться над сотрудниками, и считают их всех идиотами, поблагодарить за потраченное время и уйти. Бумажку на кумпол вопрошателя всё равно можно надеть
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Помогите понять разобраться с постр(пре)инкрементами
От: mcast  
Дата: 17.12.07 13:36
Оценка: :)
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, mcast, Вы писали:


B>Иди в поиск, и укажи строку "++i++" — ссылок на данную тему вполне достаточно.

B>Начать можно здесь
Автор: tacit_one
Дата: 02.06.04


Посмотрел уже. Четкого ответа так и не нашел!
Помогите понять разобраться с постр(пре)инкрементами
От: mcast  
Дата: 17.12.07 13:09
Оценка:
Есть вот такая задачка у некоторых работодателей в составе анкеты:
int a = 3;
int b = ++a++;
чему равно a? чему равно b?
--
Хотелось бы узнать корректность подобной записи ++a++?
Что возвращает ++a? (число?)
Что возвращает a++? (ссылку?)
В какой последовательности компилятор будет выполнять операторы в записи ++a++? (т.е. если слева на право, то компилироваться не должно, а если справа налево?)
Re: Помогите понять разобраться с постр(пре)инкрементами
От: Bell Россия  
Дата: 17.12.07 13:15
Оценка:
Здравствуйте, mcast, Вы писали:

Иди в поиск, и укажи строку "++i++" — ссылок на данную тему вполне достаточно.
Начать можно здесь
Автор: tacit_one
Дата: 02.06.04
Любите книгу — источник знаний (с) М.Горький
Re[3]: Помогите понять разобраться с постр(пре)инкрементами
От: Bell Россия  
Дата: 17.12.07 14:09
Оценка:
Здравствуйте, mcast, Вы писали:

B>>Иди в поиск, и укажи строку "++i++" — ссылок на данную тему вполне достаточно.

B>>Начать можно здесь
Автор: tacit_one
Дата: 02.06.04


M>Посмотрел уже. Четкого ответа так и не нашел!


Пример содержит неопределенное поведение. Результат выражения не определен. ИМХО достаточно четкий ответ

По исходным вопросам:

M>Хотелось бы узнать корректность подобной записи ++a++?

Она некорректна.

M>Что возвращает ++a? (число?)

Возвращается lvalue (ссылка). Подробнее — 5.3.2/1.

M>Что возвращает a++? (ссылку?)

Возвращается rvalue (копия оригинального значения) Подробнее — 5.2.6/1.

M>В какой последовательности компилятор будет выполнять операторы в записи ++a++? (т.е. если слева на право, то компилироваться не должно, а если справа налево?)

Поскольку пример сожержит UB, то этот вопрос лишен смысла.
Любите книгу — источник знаний (с) М.Горький
Re: Помогите понять разобраться с постр(пре)инкрементами
От: elcste  
Дата: 17.12.07 14:19
Оценка:
Здравствуйте, mcast, Вы писали:

M>Есть вот такая задачка у некоторых работодателей в составе анкеты:

M>int a = 3;
M>int b = ++a++;
M>чему равно a? чему равно b?

Правильный ответ: ничему. В этом случае бессмысленно говорить о значениях переменных a и b. Этот код ill-formed, реализация должна прервать трансляцию с выдачей диагностического сообщения.

M>Хотелось бы узнать корректность подобной записи ++a++?


Применительно к Вашему коду, эта запись некорректна.

M>Что возвращает ++a? (число?)


Результатом подвыражения ++a (если a имеет тип int) является lvalue.

M>Что возвращает a++? (ссылку?)


Результатом подвыражения a++ (если a имеет тип int) является rvalue.

M>В какой последовательности компилятор будет выполнять операторы в записи ++a++?


Это не имеет никакого отношения к последовательности выполнения. Речь идет только о лексическом анализе. В соответствии с грамматикой, подвыражение ++a++ будет разобрано как ++(a++). Т.к. операндом прединкремента должно быть modifiable lvalue, то код ill-formed.

M> (т.е. если слева на право, то компилироваться не должно, а если справа налево?)


Если в Ваш пример добавить скобки: (++a)++, то такой код будет well-formed. Но это ничего не изменит в плане его корректности, т.к. он будет иметь undefined behavior (подробности обсуждаются по приведенной здесь ссылке).
Re[3]: Помогите понять разобраться с постр(пре)инкрементами
От: Sergey Россия  
Дата: 17.12.07 14:24
Оценка:
> B>Здравствуйте, mcast, Вы писали:
>
> B>Иди в поиск, и укажи строку "++i++" — ссылок на данную тему вполне достаточно.
> B>Начать можно здесь
Автор: tacit_one
Дата: 02.06.04

>
> Посмотрел уже. Четкого ответа так и не нашел!

Вот четкий ответ — программа, содержащая такую конструкцию, некорректна
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.