2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 Re: Наблюдение за префиксным инкрементом
Сообщение28.03.2022, 18:50 
Аватара пользователя


29/05/17
806

(Оффтоп)

Vladimir-80 в сообщении #1551223 писал(а):
Интересно, почему молчит автор темы? Наверняка он, затевая беседу, имел какие-то мысли по этому поводу.

Так мне викой в лицо ткнули вот и молчу :-)

 Профиль  
                  
 
 Re: Наблюдение за префиксным инкрементом
Сообщение28.03.2022, 21:09 
Заслуженный участник
Аватара пользователя


16/07/14
9149
Цюрих
zykov в сообщении #1551268 писал(а):
Что-то смотрю в документации и не вижу спецификации например для "a+b", в каком порядке "a" и "b" оцениваются.
Потому что её там нет - вычисление подывражений unsequenced (6.5.3).

 Профиль  
                  
 
 Re: Наблюдение за префиксным инкрементом
Сообщение29.03.2022, 06:12 
Заслуженный участник


18/09/21
1756
Ну да, тут не отличается от любого вызова функции "func(a, b);", где порядок оценки аргументов может быть произвольный.
Тут только функция "operator+(a,b);".

 Профиль  
                  
 
 Re: Наблюдение за префиксным инкрементом
Сообщение02.04.2022, 05:36 
Аватара пользователя


28/10/21
100
zykov в сообщении #1551268 писал(а):
mihaild в сообщении #1551265 писал(а):
Нет, ассоциативность - это как расставлять скобки
Да, верно.
Что-то смотрю в документации и не вижу спецификации например для "a+b", в каком порядке "a" и "b" оцениваются. Что важно при изобилии side effects.


Ключевым моментом тут является не то, что порядок не оговаривается, а то, что никакого порядка вообще не сущестывует. Неоговоренный порядок (indeterminately sequenced evaluation) и отсутствие порядка (unsequenced evaluation) - это соврешенно разные вещи.

В выражении `a+b` подвыражения `a` и `b` являются unsequenced и в С, и в С++, то есть неупорядочены вообще никак. Они могут фактически вычисляться параллельно, перемешанно и одновременно. По этой причине ни о каком `++i + ++i` в С и С++ не может быть и речи, ни со скобками, ни без скобок, ни вообще никак.

Vladimir-80 в сообщении #1551223 писал(а):
Интересно, почему молчит автор темы? Наверняка он, затевая беседу, имел какие-то мысли по этому поводу.


Возможно потому что именно этот вопрос в С и С++ форумах - популярный торололо вброс чуть ли не с Лурка. Скорее всего именно с этим мы и имеем дело в данном случае.

-- 01.04.2022, 18:42 --

zykov в сообщении #1551314 писал(а):
Ну да, тут не отличается от любого вызова функции "func(a, b);", где порядок оценки аргументов может быть произвольный.
Тут только функция "operator+(a,b);".


Такая аналогия справедлива только в С, где вычисление аргументов функции тоже точно так же unsequenced, то есть может выполняться паралелльно/одновременно/перемешанно для всех аргументов.

Для С++ такая аналогия грубейше не верна. Порядок вычисления аргументов функции в С++ является indeterminately sequenced, то есть все аргументы должны вычисляться изолированно в каком-то произвольном порядке.

Например

Используется синтаксис C++
int foo(int a, int b)
{
  return a + b;
}

int i = 1;
int r = foo(++i, ++i);
 

В языке С++ поведение определено и функция гарантированно возвращает 5. (Низкокачественные компиляторы, вроде GCC, пока не добрались до этой гарантии С++17)
В языке С поведение не определено, никто ничего не вычисляет и никуда не возвращает, код в общем случае - некомпилируем.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2, 3

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group