Задачка с башорга

romy4

invoke [brain]
Сергей Тарасов
но в стандарте С++ я не видел, чтобы оговаривалась такая ситуация.
 

dark-demon

d(^-^)b
Есть теория программирования (Функционального, Эмпирического и т.п.)
ты перечислил две теории и сделал намёк, на то, что их существует больше. какая из них является "теорией всея программирования", которой должны соответствовать все языки?

не угадал, ещё варианты?

Есть Стандарт языка c++, который, Рома (!), должен оговаривать такие ситуации. Если он не разрешает такие неоднозначности - это плохой стандарт и его нужно исправить.
в си существует некая "стандартная библиотека", которая является стандартом де-факто для языка си. так вот, в ней, преинкремент нигде не возвращает значение - только ссылку на инкрементированную переменную.

кстати, вот пример попроще башорговского:
Код:
int x= 1;
x= x+--x;
чему по твоему будет равен x?
 

Сергей Тарасов

Профессор
Автор оригинала: dark-demon
не угадал, ещё варианты?
Рома, это не ты. Обращение было не к тебе... :))

Автор оригинала: dark-demon
в си существует некая "стандартная библиотека", которая является стандартом де-факто для языка си. так вот, в ней, преинкремент нигде не возвращает значение - только ссылку на инкрементированную переменную.
Какая еще "стандартная библиотека"??? O_O
 

romy4

invoke [brain]
dark-demon
"преинкремент" в си не является функцией и к "стандартной библиотеке" он тоже не относится
 

Фанат

oncle terrible
Команда форума
за что люблю эту тему - всегда вызовет оживленное обсуждение =)
 

God

Новичок
Сергей Тарасов
VisualStudio:
Код:
	int i = 5;
  mov         dword ptr [i],5 
	i = ++i + ++i;
  mov         eax,dword ptr [i] 
  add         eax,1 
  mov         dword ptr [i],eax 
  mov         ecx,dword ptr [i] 
  add         ecx,1 
  mov         dword ptr [i],ecx 
  mov         edx,dword ptr [i] 
  add         edx,dword ptr [i] 
  mov         dword ptr [i],edx
Результат - 14
 

romy4

invoke [brain]
супер оптимизация :))
add eax,1
оно работает медленнее чем
inc eax
 

Сергей Тарасов

Профессор
dark-demon
Причем тут вообще STL ???
Вы вообще знаете что такое STL ?

Речь идет о базовых типах и базовы операциях.

-~{}~ 14.05.07 16:46:

God

И правильно. Проверяли без оптимизации.
 

God

Новичок
dark-demon
STL не может быть стандартом для Си, т.к. написан на C++ и для C++

Гы, а форум назывался Вопросы по программированию на РНР
 

dark-demon

d(^-^)b
Сергей Тарасов, речь не о базовых типах или операциях. речь о правильной логике работы, которая в коде stl отражена достаточно чётко. или по твоему
Код:
int i; ++i;
чем-то принципиально отличается от
Код:
myclass i; ++i;
?

God, более того, языка "Си" - не существует. :) есть "С" и компания. причём долгое время он развивался вообще без каких-либо стандартов, а потом их появилось аж несколько разных.
 

Сергей Тарасов

Профессор
dark-demon
Ну, скажем базовые типы и операции, а также логика работы с ними, первичны по отношению к STL.

вообще тебя куда-то совсем не туда занесло и ты уже начал писать какую-то чушь. Предлагаю вернуться к теме.
 

romy4

invoke [brain]
dark-demon
отличается
потому что только для стандартных типов применима операция "++", иначе это вызывает ошибку компиляции
в остальных случаях это может быть только перегрузка оператора "++" которая в свою очередь вызовет какой-то метод класса myclass
 

dark-demon

d(^-^)b
romy4, она применима для всех типов для которых она определена. для стандартных типов она определена изначально, для своих - нужно определять самому, что естественно.

Сергей Тарасов, ок, эта логика является стандартом де-факто, потому как все компиляторы так работают. а работают они так потому что она позволяет писать более быстрые программы, для чего собественно и разрабатывался си - использование высокоуровневой парадигмы, не требующей от компилятора генерации избыточного кода (например, ненужного в преинкременте копирования вычисленного значения).
 

Сергей Тарасов

Профессор
dark-demon
"использование высокоуровневой парадигмы, не требующей от компилятора генерации избыточного кода"

Это все конечно хорошо, но не по делу... Речь идет о Си и базовых типах. Переопределение операций тут не причем.

Понятно, что такое поведение компилятора более оптимально, с этим никто не спорит, но вот правильно ли оно с точки зрения стандарта C++. Этот вопрос пока повис в воздухе.

Кстати, не все компиляторы так работают. Я сегодня писал icc выдает 13.
 

dark-demon

d(^-^)b
с точки зрения стандарта поведение компилятора неопределено - это мы уже давно выяснили :) сейчас мы выясням, кто больше прав: те, кто возвращают ссылку или те, кто возвращают значение :)

Кстати, не все компиляторы так работают. Я сегодня писал icc выдает 13.
кто такой icc? компиль от интела?
 
Сверху