powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Префиксные операции и стандарт
25 сообщений из 55, страница 2 из 3
Префиксные операции и стандарт
    #33718399
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эээ... ссылку надо возвращать, чтобы корректно отработал inc(inc(a)).
inline int &inc(int &i)
{ i++; return i; }

и уж совсем к вящей славе страуструпа можно объявить volatile int a;
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #33718459
x_0040h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoэээ... ссылку надо возвращать, чтобы корректно отработал inc(inc(a)).
inline int &inc(int &i)
{ i++; return i; }

и уж совсем к вящей славе страуструпа можно объявить volatile int a;
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
=> 6 =)
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #33718874
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё с ним ясно :-|
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #33719221
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y
v> Если я правильно понял Карабаса Барабаса, то его
v> интересует как, по мнению форумчан, должны вычисляться
v> подобные выраженияПоразмыслив, пришел к выводу, что это как раз тот случай, когда прав компилятор, как бы он ни вычислял те выражения. Так что надо просто знать, как конкретно ваш компилятор правильно делает и учитывать особенности правильности именно вашего компилятора :)

PS: шутки типа "в военное время значение синуса может достигать 4" перестают быть шутками - одна и та же программа, скомпиленная на разных компиляторах, выдаст совершенно разные значения при вычислении простейшего выражения. А что делать, написано "мины" - не ходи !
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #33720860
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тебе такое выражение понадобилось? Это же изврат.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Префиксные операции и стандарт
    #34521654
qwertyqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yЕсли я правильно понял Карабаса Барабаса, то его интересует как, по мнению форумчан, должны вычисляться подобные выражения. И если я понял его правильно, то тогда я не понял чего народ тут усиленно толкует о том что дважды два четыре (результат по стандарту не определен бла-бла-бла)

Я тут по-медитировал, и тоже пришел к мнению, что
Код: plaintext
1.
2.
 int a= 1 ;
 a=(++a)+(++a);
наверное правильнее а=5, т.е. перед вычислением хранить промежуточные значения операндов.
В что-то типа польской записи: (PREINCa)(PREINCa)+
PREINCa=2
PREINCa=3
2+3=5
И код генерировать соответсвующий.

Это было бы логично для паралельных вычислений/языков прграммирования и то в случае специального указания. По моему мнению данная конструкция не подлежит распаралеливанию.
Это пример классического последовательного вычисления.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522283
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандарт стандартом, но на мой взгляд ВПОЛНЕ логично вычислить операнды перед выполнением операции.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522291
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. перед сложением дважды выполнить инкремент и не парить мозк с сохранением "промежуточных" значений операндов как это делает C#.
Если кто-то написал подобный код, он должен отдавать себе отчет в том к каким последствиям сие приведет
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522325
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)т.е. перед сложением дважды выполнить инкремент я вот сейчас подумал, что если выполнить вот такое: func(++i,++i); то может оказаться ..... проверил - точно, функция будет вызвана так: func(2,3); т.е. в разных вариантах "применения" одна и та же бяка вылезет разными боками, что не есть хорошо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
void __fastcall TForm4::Button1Click(TObject *Sender)
{
  int i= 1 ;
  int r=(++i)+(++i);
  Label1->Caption=AnsiString().sprintf("i=%i,(++i)+(++i)=%i",i,r);
} //   i= 3 ,(++i)+(++i)= 6 

int Func(int a,int b)
{
  return a+b;
}

void __fastcall TForm4::Button2Click(TObject *Sender)
{
  int i= 1 ;
  int r=Func(++i,++i);
  Label2->Caption=AnsiString().sprintf("i=%i,Func(++i,++i)=%i",i,r);
} //   i= 3 ,Func(++i,++i)= 5 

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522385
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тебе же сказали поведение не определено. Ты вот сам встань на место человека пишушего компилятор, вот что он сделает - возьмет первый параметр, инкрементирует, засунет в стек, возьмет второй - опять инкрементирует, засунет в стек. Что еще проверять его семантику? А всегда ли это возможно? может быть у тебя в качестве параметра выступает функция, имеющая "побочные эффекта", ну например изменяющая последующие параметры, да и находится она в другом модуле компиляции и что делать?
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522452
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабася вот сейчас подумал, что если выполнить вот такое: func(++i,++i); то может оказаться ..... проверил - точно, функция будет вызвана так: func(2,3); т.е. в разных вариантах "применения" одна и та же бяка вылезет разными боками, что не есть хорошо


Очень даже хорошо. Последовательное вычесление параметров функции. Другой вопрос - в каком порядке они вычисляются. Если порядок точно известен (и не изменится), то без боязни можно использовать такую запись, а если не уверен, то не рискуй. Об этом и предупреждает Саттер.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522466
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh ты абсолютно неправ. А что будет ежели сменить компилятор?
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522491
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedAkh ты абсолютно неправ. А что будет ежели сменить компилятор?

Не спеши с таким утверждением.
Порядок вычисления аргументов фунций С++ строго регламентируется. Для этого существует спецификатор функции.
И не стоит бояться того, что сначала выполниться два инкеремента, а потом вычисляться парметры. Этого не будет никогда.
Более того, даже у такого стандартного оператора как "," порядок тоже строго регламентирован. Правда только стандратного.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522511
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята хорош умничать... Результат таких операций не определен - это всем прекрасно известно. Тут речь идет об том, как было бы правильнее это дело стандартизировать (гипотетически).

-----------------------
Объективная реальность – бред, вызванный недостатком алкоголя в крови
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522527
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedНу тебе же сказали поведение не определенокак раз это и обсуждаем
blindedвстань на место человека пишушего компиляторвот потому-то как раз я и думаю, что изменение неопределенного поведения в сторону определенного - это хорошо.

А если i - это не int, а TMySuperPuperClass ? Тогда даже одна и та же запись (++i)+(++i) будет работать по-разному для разных типов i. Это нехорошо.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522535
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yРебята хорош умничать... Результат таких операций не определен - это всем прекрасно известно. Тут речь идет об том, как было бы правильнее это дело стандартизировать (гипотетически).

-----------------------
Объективная реальность – бред, вызванный недостатком алкоголя в крови

Это разные вещи.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522547
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Это разные вещи.
Одинаковые.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522575
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y Akh
Это разные вещи.
Одинаковые.

Ну, раз ты ничего не знаешь про оператор ",", то что лезешь в обсуждение?
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522630
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yРебята хорош умничать... Результат таких операций не определен - это всем прекрасно известно. Тут речь идет об том, как было бы правильнее это дело стандартизировать (гипотетически).


Умные парни из комитета уже о всем подумали. Ответ - НИКАК. Т.е. так, как сейчас есть в стандарте.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522810
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh v6y Akh
Это разные вещи.
Одинаковые.

Ну, раз ты ничего не знаешь про оператор ",", то что лезешь в обсуждение?
Причем здесь оператор "," если речь идет о порядке вычисления префиксного оператора "++" ?

P.S. Тебя забыл спросить куда мне лезть, а куда не лезть, салага.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34522842
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y Akh v6y Akh
Это разные вещи.
Одинаковые.

Ну, раз ты ничего не знаешь про оператор ",", то что лезешь в обсуждение?
Причем здесь оператор "," если речь идет о порядке вычисления префиксного оператора "++" ?

P.S. Тебя забыл спросить куда мне лезть, а куда не лезть, салага.

При том, что пять предыдущих сообщений велись на другую тему.

Если ты оставил комментарий не к текущему разговору, то будь добр отмечать это, а не флудить и оскорблять участников конференции.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34523047
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Причем здесь оператор "," если речь идет о порядке вычисления префиксного оператора "++" ?

При том, что пять предыдущих сообщений велись на другую тему.

А еще где-то 30-35 предыдущих на эту? (риторический вопрос)


Если ты оставил комментарий не к текущему разговору, то будь добр отмечать это, а не флудить и оскорблять участников конференции.

Что ж, каждый видит обсуждение немного по своему. С моей точки зрения никаких оскорблений и флуда не было.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34523931
батрак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабаспрефиксный оператор ++ выполняется ДО ИСПОЛЬЗОВАНИЯ переменной, это можно понимать и как ДО ВЫЧИСЛЕНИЯ ВСЕГО ВЫРАЖЕНИЯ, а раз переменная используется в выражении и есть префиксная операция с ней (++), то переменная должна быть увеличена.


Несколько неправильная трактовка происходящего. правильней звучало бы так: операции постфиксного и префиксного инкремента имеют приоритет более высокий чем операции + и =, поэтому они вычисляются первыми.. А разница в работе постфиксного и префиксного инкремента заключается лишь в том, что префиксная операция увеличивает значение на 1 у объекта и возвращает полученное значение, а постфиксная увеличивает значение на 1 у объекта, а возвращает значение хранивщееся в обьете до увелечения.
Карабас Барабас
Код: plaintext
1.
2.
3.
4.
  int a= 1 ;
  int &b=a;
  int &c=a;
  a=(++b)+(++c);
выдает 5

Мнения ?

должно выдавать 6, как и в первом варианте, но в Builder-ре действительно даёт 5, опираясь на приорететы операций, я лично считаю этот результат неправильным и неожиданным.
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34524049
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
батраквот и стандартописатели тоже поломали голову, поломали ... да и решили: "а пох, будет андефинид бехавиор, а кому не нравится, пускай на паскале пишут или на бейсике"
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Префиксные операции и стандарт
    #34524371
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабасвот и стандартописатели тоже поломали голову, поломали ... да и решили: "а пох, будет андефинид бехавиор,
Думаю, не совсем так. Думаю, этот андефинед бихавиор - прямое следствие того факта, что к моменту создания стандарта существовали популярные компиляторы, использовавшие как тот, так и иной вариант. Ну а дальше - известная песня "в целях совместимости и чтоб никого не обидеть".

Давно не заглядывал, но по моим воспоминаниям, в стандарте даже не было оговорки о том, что компилятор обязан считать такие вещи "всегда одинаково".
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Префиксные операции и стандарт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]