LINUX.ORG.RU

Вопрос по старой шутке о ++i + ++i


0

0

Есть старая шутка,

int i = 5;
i = ++i + ++i;

Чему равно i ? Ответ как известно 6 + 7, т.е. 13.

Но, я тут попробовал сделать вот так
----------
$ python
Python 2.4.4 (#1, Mar 31 2007, 20:18:30)
[GCC 4.1.2 (Gentoo 4.1.2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> i = 5
>>> ++i + ++i
10
-----------

А потом вот так
------------
irb
irb(main):001:0> i = 5
=> 5
irb(main):002:0> ++i + ++i
=> 10
------------

И как видим два раза получил 10.

Вопрос, "где собака зарыта?"

anonymous

И питон, и руби воспринимают это выражение как (+(+i))+(+(+i)), так как нет оператора ++.

true
()

А при чем здесь питон? Это ж C.

++i это значит i=i+1

Rebel_Star
()

За ключевую строчку пора банить.

soomrack ★★★★
()
Ответ на: комментарий от true

> И питон, и руби воспринимают это выражение как (+(+i))+(+(+i)), так как нет оператора ++.

Точно... Спасибо

2 Rebel, ваш кругозор просто поражает

anonymous
()

int i = 5; i = ++i + ++i;

Ваша проблема в том, что вы расставляете пробелы, которые компилятор C++ игнорирует. Также известно, что порядок вычисления, в частности, данного выражения не определён. Компиляторы, которые получают 14, действуют так: i = ++i+++i; 1) ++i = 6 2) i++ = 7 3) ++i = 6 4) 7+++i = 7 + ++6 = 7 + 7 = 14.

Как видите, одни и те же операторы могут выполняться по нескольку раз. Но пока это не запрещено стандартом, так и будет. Ждём осени 2008го - весны 2009го...

anonymous
()
Ответ на: комментарий от anonymous

А у меня cint выдал вообще 6... я в шоке... гсс4.2 выдал стандартные 14

Doom3r
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.