Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что получится в результате i++ + ++i + ++i, Вопрос на собеседовании 
:(
    Опции темы
ZZZkoderZZZ
Дата 11.3.2013, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




Был на собеседовании в одной программистской компании. Спросили чему будет равно i после такой операции
Код

    int i=2;
    i=i++ + ++i + ++i;

А вы знаете чему будет равно i ?
PM MAIL   Вверх
borisbn
Дата 11.3.2013, 13:14 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону




Если компания нормальная, то от тебя ждали, что ты скажешь, что это - UB

Это сообщение отредактировал(а) borisbn - 11.3.2013, 13:51


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
kuzulis
Дата 11.3.2013, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 5.9.2007




Охххх.. Ну и кандибобрик...  smile 

Не, я понимаю там, задания-шманания - но не до такой же степени.

Вот я к примеру бы нифига не ответил а просто покрутил бы у виска и ушел 
с гордо поднятой головой smile
PM MAIL   Вверх
NoviceF
Дата 11.3.2013, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону




лурк в курсе проблемы

http://lurkmore.to/%2B%2Bi_%2B_%2B%2Bi

и вот тоже в тему

http://ru.wikipedia.org/wiki/%D0%A2%D0%BE%...%BD%D0%B8%D1%8F

Это сообщение отредактировал(а) NoviceF - 11.3.2013, 18:39
PM MAIL   Вверх
Alca
Дата 11.3.2013, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006




Я сказал, что я так не пишу и поэтому не знаю. 
Надо спросить у того, кто этот код писал.


--------------------
PM WWW ICQ Skype Jabber   Вверх
bsa
Дата 11.3.2013, 21:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия




Это вопрос на знание ЭЛЕМЕНТАРНЫХ ПОДВОДНЫХ КАМНЕЙ С++. Если ты не знаешь результат этой операции (рафинированной, кстати), то как ты определишь проблему в более сложном случае?
Этот вопрос используется для получения представления об опыте и интересах потенциального сотрудника. Если сотрудник не интересуется языком, не читает книжки, не обсуждает на форумах проблемы, то это говорит о том, что он не ту профессию выбрал.
PM   Вверх
Alca
Дата 12.3.2013, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006




Цитата

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

Можно пример такой (более сложной) ситуации?

Это сообщение отредактировал(а) Alca - 12.3.2013, 01:06


--------------------
PM WWW ICQ Skype Jabber   Вверх
borisbn
Дата 12.3.2013, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону




> Можно пример такой (более сложной) ситуации?
Открой исходники буста. Или, хотя бы, STL


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 12.3.2013, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия




Цитата(Alca @  12.3.2013,  02:05 Найти цитируемый пост)
Можно пример такой (более сложной) ситуации?

Код
printf("%i %s\n", i, array[i++]);
Эта ситуация уже не такая очевидная.
Но есть более интересный пример:
Код
std::cout <<  i << array[i++] << std::endl;

PM   Вверх
sergioK1
Дата 12.3.2013, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011




Цитата(bsa @ 12.3.2013,  09:06)
Цитата(Alca @  12.3.2013,  02:05 Найти цитируемый пост)
Можно пример такой (более сложной) ситуации?

Код
printf("%i %s\n", i, array[i++]);
Эта ситуация уже не такая очевидная.
Но есть более интересный пример:
Код
std::cout <<  i << array[i++] << std::endl;

Стандартный вопрос на интервью для жуниорской позиции,
prefix/posfix оператор, команды обрабатываться с лева на право, 
что интресного то  :- smile 
следующий вопрос который стоит это что будет в случае с потоками,
PM MAIL   Вверх
azesmcar
Дата 12.3.2013, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




Цитата(Alca @  12.3.2013,  01:05 Найти цитируемый пост)
Можно пример такой (более сложной) ситуации?

Кажется у Сатера было.
Код

foo(
    std::auto_ptr<X>(new X()),
    std::auto_ptr<Y>(new Y()));

Позможная утечка памяти при возникновении исключения в конструкторе.

Это сообщение отредактировал(а) azesmcar - 12.3.2013, 11:38
PM   Вверх
xvr
Дата 12.3.2013, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия




Цитата(sergioK1 @  12.3.2013,  11:28 Найти цитируемый пост)
что интресного то

Ну например то, что к данному примеру это отношения не имеет  smile 

PM MAIL   Вверх
azesmcar
Дата 12.3.2013, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




Цитата(borisbn @  12.3.2013,  05:48 Найти цитируемый пост)
Открой исходники буста. Или, хотя бы, STL

А много ты там UB видел? smile

Это сообщение отредактировал(а) azesmcar - 12.3.2013, 11:39
PM   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




Цитата(sergioK1 @ 12.3.2013,  11:28)
Стандартный вопрос на интервью для жуниорской позиции,

Так есть ли конкретный ответ на все эти вопросы, или это всё таки undefined behavior?
Может быть будущий младший кодер-эникейщик должен привести ответы для MS и gcc со всеми комбинациями ключей? А далее при правильном ответе его спросят что будет, если в программе 100 потоков.
Как ответить правильно?
А если немного усложнить
Код

int i=0;
int array[3]={1,2,3};
std::cout <<  i << array[i++] << array[++i] << std::endl;
i=0;
std::cout <<  i << array[++i] << array[i++] << std::endl;
Выведутся одинаковые строки или разные, и почему?

Это сообщение отредактировал(а) ZZZkoderZZZ - 12.3.2013, 11:59
PM MAIL   Вверх
borisbn
Дата 12.3.2013, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону




Цитата(azesmcar @  12.3.2013,  11:39 Найти цитируемый пост)
А много ты там UB видел?

 smile 
я имел в виду просто "более сложная ситуация". ИМХО разобраться в бусте или STL - существенно сложнее, чем определить UB в такого рода коде


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
azesmcar
Дата 12.3.2013, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




Цитата(ZZZkoderZZZ @  12.3.2013,  11:41 Найти цитируемый пост)
Так есть ли конкретный ответ на все эти вопросы, или это всё таки undefined behavior?

Это UB, толко вот UB в данном случае этоо unspecified (не undefined, а unspecified) behavior. Другого ответа нет (по крайней мере правильного).

Разница все таки есть.
Цитата

unspecified behavior
behavior, for a well-formed program construct and correct data, that depends on the implementation.


Цитата

undefined behavior
behavior, such as might arise upon use of an erroneous program construct or erroneous data, for which this
International Standard imposes no requirements.

PM   Вверх
borisbn
Дата 12.3.2013, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону




Цитата(ZZZkoderZZZ @  12.3.2013,  11:41 Найти цитируемый пост)
Как ответить правильно? 

смотри мой самый первый ответ.

а если точнее, то (6.5 clause 2 of C language standard - обрати внимание - не Си++, а Си. В первом дольше искать)
Цитата
Between the previous and next sequence point an object shall have its stored value
modified at most once by the evaluation of an expression.  Furthermore, the prior value
shall be read only to determine the value to be stored.

This paragraph renders undefined statement expressions such as
i = ++i + 1;


Ессно, никто в здравом уме не будет требовать от тебя знание номера раздела стандарта и точной формулировки, но если ты своими словами объяснишь, что это - UB, то ИМХО, этого д.б. достаточно


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
azesmcar
Дата 12.3.2013, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




Цитата

Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual
expressions, and the order in which side effects take place, is unspecified.53) Between the previous
and next sequence point a scalar object shall have its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full
expression; otherwise the behavior is undefined. [Example:

Код

i = v[i++]; // the behavior is unspecified
i = 7, i++, i++; // i becomes 9
i = ++i + 1; // the behavior is unspecified
i = i + 1; // the value of i is incremented

PM   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




Цитата(azesmcar @ 12.3.2013,  11:55)
Код

i = ++i + 1; // the behavior is unspecified

Здесь кажется всё ясно. Всё равно сначала инкрементировать, а потом прибавить 1, или сначала прибавить 1, а потом инкрементировать. Поэтому i в этой строке увеличится на 2.
PM MAIL   Вверх
azesmcar
Дата 12.3.2013, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




Цитата(ZZZkoderZZZ @  12.3.2013,  12:10 Найти цитируемый пост)
Здесь кажется всё ясно

Вот именно, что нет.

Цитата(azesmcar @  12.3.2013,  11:55 Найти цитируемый пост)
the order of evaluation of operands of individual operators and subexpressions of individual
expressions, and the order in which side effects take place, is unspecified


PM   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




Цитата(azesmcar @ 12.3.2013,  13:13)
Цитата(ZZZkoderZZZ @  12.3.2013,  12:10 Найти цитируемый пост)
Здесь кажется всё ясно

Вот именно, что нет.

Порядок выполнения не ясен, но при этом однозначный результат.
Код

int i=0;
i=++i+1;

При каком ходе выполнения здесь получится не 2 ?
PM MAIL   Вверх
bsa
Дата 12.3.2013, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия




Цитата(ZZZkoderZZZ @  12.3.2013,  14:49 Найти цитируемый пост)
При каком ходе выполнения здесь получится не 2 ?
Компилятор умеет оптимизировать код. Таким образом, фактическая запись i+1 после операции ++i может произойти после операции i = (i+1) + 1. В итоге результат будет i+1, например:
Код
mov ax,_i
inc ax
mov dx,1
add dx,ax
mov _i,dx
mov _i,ax

По стандарту, так писать нельзя. если ты так пишешь, то все риски берешь на себя.
PM   Вверх
sergioK1
Дата 12.3.2013, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011




Цитата(ZZZkoderZZZ @ 12.3.2013,  10:41)
Цитата(sergioK1 @ 12.3.2013,  11:28)
Стандартный вопрос на интервью для жуниорской позиции,

Так есть ли конкретный ответ на все эти вопросы, или это всё таки undefined behavior?
Может быть будущий младший кодер-эникейщик должен привести ответы для MS и gcc со всеми комбинациями ключей? А далее при правильном ответе его спросят что будет, если в программе 100 потоков.
Как ответить правильно?
А если немного усложнить
Код

int i=0;
int array[3]={1,2,3};
std::cout <<  i << array[i++] << array[++i] << std::endl;
i=0;
std::cout <<  i << array[++i] << array[i++] << std::endl;
Выведутся одинаковые строки или разные, и почему?

читай про prefix/postfix, это то что требуют чтобы жуниор знал,
в той фирме и в других , 
если ты не знаешь это то дальше говорить c тобой никто не станет,




PM MAIL   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




sergioK1

Я знаю что такое prefix/postfix.
 
Но должен ли я знать что выдаст приведенный некорректный пример и от чего зависит получение разных результатов?

Результатов там может быть много, и они зависят от компилятора, ключей компиляции, и еще много от чего. Даже в разных местах одной и той же программы этот пример может дать разные результаты - читайте http://lurkmore.to/%2B%2Bi_%2B_%2B%2Bi.
Код

int i=5,j=5;
i=++i+ ++i;
printf("i=%i  j=%i" ,i,++j+ ++j); //Вывод: i=14  j=13
 
И значит младший кодер-эникейщик должен рассмотреть все варианты? 
Какие же тогда требования к старшему кодеру?

Это сообщение отредактировал(а) ZZZkoderZZZ - 12.3.2013, 15:22
PM MAIL   Вверх
sQu1rr
Дата 12.3.2013, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london




Цитата(ZZZkoderZZZ @  12.3.2013,  15:16 Найти цитируемый пост)
Но должен ли я знать что выдаст приведенный некорректный пример и от чего зависит получение разных результатов? 

пример некорректен, но не потому что UB а потому что ты выходишь за пределы массива: 0 2 3 3 - запрашиваемые индексы

Извеняюсь, не заметил i = 0; в таком случае пример корректен, но строки будут разные, индексы: 0 2, 1 1. Забавно, что читал про постфикс/префикс и всеравно не знаешь что выведет программа.

Это сообщение отредактировал(а) sQu1rr - 12.3.2013, 15:23
PM MAIL Skype GTalk   Вверх
baldina
Дата 12.3.2013, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва




Цитата(ZZZkoderZZZ @  12.3.2013,  15:16 Найти цитируемый пост)
И значит младший кодер-эникейщик должен рассмотреть все варианты? 

нет. он просто не должен так писать. не говоря уже о старшем
PM MAIL   Вверх
azesmcar
Дата 12.3.2013, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




Цитата(sQu1rr @  12.3.2013,  15:19 Найти цитируемый пост)
Забавно, что читал про постфикс/префикс и всеравно не знаешь что выведет программа.

А ты знаешь?
Ну и что выведет
Код

int i = 0;
std::cout << i++ << i++ << std::endl;

PM   Вверх
sQu1rr
Дата 12.3.2013, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london




Цитата(azesmcar @  12.3.2013,  15:52 Найти цитируемый пост)
А ты знаешь?
Ну и что выведет
код C++
1:
2:
int i = 0;
std::cout << i++ << i++ << std::endl;

Да, 01

Цитата

In C++, overloaded operators act like functions, and thus operators that have been overloaded introduce sequence points in the same way as function calls

ссылка

Стоп
Я что-то пропустил? Перечитываю

Это сообщение отредактировал(а) sQu1rr - 12.3.2013, 16:33
PM MAIL Skype GTalk   Вверх
azesmcar
Дата 12.3.2013, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




sQu1rr

Ну и что это нам дает?
Цитата

the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which side effects take  place, is unspecified

PM   Вверх
bsa
Дата 12.3.2013, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия




Цитата(sQu1rr @  12.3.2013,  17:32 Найти цитируемый пост)
Да, 01

странно. А у меня gcc при любых опциях компиляции выдает 10... Почему бы это?  smile 
PM   Вверх
sQu1rr
Дата 12.3.2013, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london




Цитата(bsa @  12.3.2013,  16:36 Найти цитируемый пост)
странно. А у меня gcc при любых опциях компиляции выдает 10... Почему бы это?    

Намек понял, развернутый пример и правла нагляднее. Не знаю, почему подумал, что это разные сиквенс пойнты.
PM MAIL Skype GTalk   Вверх
azesmcar
Дата 12.3.2013, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения




bsa, он еще и предупреждает плюс ко всему
Цитата

warning: operation on 'i' may be undefined [-Wsequence-point]

http://liveworkspace.org/code/2zwVZO$0


Это сообщение отредактировал(а) azesmcar - 12.3.2013, 16:39
PM   Вверх
baldina
Дата 12.3.2013, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва




Цитата(sQu1rr @  12.3.2013,  16:32 Найти цитируемый пост)
Да, 01

Цитата(bsa @  12.3.2013,  16:36 Найти цитируемый пост)
А у меня gcc при любых опциях компиляции выдает 10

мой лучше оптимизирует, он дает 00
PM MAIL   Вверх
NoviceF
Дата 12.3.2013, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону




Ещё статья от Алёны на тему, там вроде бы довольно наглядно всё расписывается.

http://alenacpp.blogspot.ru/2005/11/sequence-points.html
PM MAIL   Вверх
sergioK1
Дата 13.3.2013, 08:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011




Цитата(NoviceF @ 12.3.2013,  18:14)
Ещё статья от Алёны на тему, там вроде бы довольно наглядно всё расписывается.

http://alenacpp.blogspot.ru/2005/11/sequence-points.html

Меня такому еще на первом курсе научили, когда никаких блогеров и в помине не бы,

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

В нормальной фирме от кандидата ждут имеено такой ответ ,

PM MAIL   Вверх
Akella
Дата 13.3.2013, 10:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант




Цитата(ZZZkoderZZZ @  11.3.2013,  13:05 Найти цитируемый пост)
i=i++ + ++i + ++i;


хорошо, что в delphi так нельзя  smile 
PM MAIL   Вверх
Zloxa
Дата 13.3.2013, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




Цитата(Akella @ 13.3.2013,  11:15)
Цитата(ZZZkoderZZZ @  11.3.2013,  13:05 Найти цитируемый пост)
i=i++ + ++i + ++i;


хорошо, что в delphi так нельзя  smile

Кстати тоже подумал про "провокацию гoвнокодинга"(с) и даже изучил этот вопрос применительно к Java. Хорошая новость - у жавы последовательность вычислеия выражения специфиед. Плохая новость, нельзя использовать как контр аргумент делфисраче с LSD.

Это сообщение отредактировал(а) Zloxa - 13.3.2013, 10:25


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akella
  Дата 13.3.2013, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант




блин, оказывается, можно с помощью DoInc

Код
procedure TForm9.Button1Click(Sender: TObject);
  function DoInc(var AI : integer): integer; //inline;
  begin
    AI := AI + 1;
    Result := AI;
  end;
var i : integer;
begin
  i := 5;
  i := DoInc(i) + DoInc(i);
  ShowMessage(IntToStr(i)); //Тоже 13. 
end;


Добавлено через 10 минут и 37 секунд
и результат будет зависеть от того, будет ли присутствовать var

function DoInc(var AI : integer): integer; //будет 13
function DoInc(AI : integer): integer; //будет 12
PM MAIL   Вверх
Zloxa
Дата 13.3.2013, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




Akella, а можешь найти в спецификации языка expression evaluation order? Я только для short-cirquit evaluation boolean expression вычитал, что они идут слева направо. 

Думаю и для обычных выражений порядок выполнения предопределен, иначе, скажем, конкатенация давала бы недетерменированный результат. Но где это описано - не нашел.

Добавлено через 4 минуты и 35 секунд
Цитата(Akella @  13.3.2013,  12:03 Найти цитируемый пост)
и результат будет зависеть от того, будет ли присутствовать var

однако ж странно было бы иначе  smile

Добавлено через 8 минут и 55 секунд
Скажите пожалуйста, кто знает, а все темы участника ZZZkoderZZZ во флейм переесли действительно для того, чтобы их к делфисрачу свести?  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akella
Дата 13.3.2013, 11:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант




ZZZkoderZZZ, сколько у тебя учетных записей на Винграде и какая из них основная?
PM MAIL   Вверх
krundetz
Дата 15.3.2013, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)




Цитата(bsa @  11.3.2013,  21:08 Найти цитируемый пост)
Это вопрос на знание ЭЛЕМЕНТАРНЫХ ПОДВОДНЫХ КАМНЕЙ С++. Если ты не знаешь результат этой операции (рафинированной, кстати), то как ты определишь проблему в более сложном случае?
Этот вопрос используется для получения представления об опыте и интересах потенциального сотрудника. Если сотрудник не интересуется языком, не читает книжки, не обсуждает на форумах проблемы, то это говорит о том, что он не ту профессию выбрал.

 smile 

Это сообщение отредактировал(а) krundetz - 15.3.2013, 16:00


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.0969 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.