powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / выполнить пример с инкрементом не на компиляторе MS ++
49 сообщений из 49, показаны все 2 страниц
выполнить пример с инкрементом не на компиляторе MS ++
    #39727362
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include <iostream>
int f (int &p){
    return p++;
}
void main(){
  int i = 0;
  i= i + f(i);
  std::cout<<i<<"\n";

  i = 0;
  i= f(i) + i;
  std::cout<<i;
}


в с++ от перемены мест слогаемых сумма не меняется -- пример выдает две единицы.

на сишарпе - меняется, такой пример выдает 0 и 1





Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
using System;
using System.IO;

class a {
  private static int f (ref int p){
    return p++;
  }
  public static void Main(){
    int i = 0;
   i= i  + f(ref i);
    Console.WriteLine(i);
    i = 0;

    i=f(ref i) +i;
    Console.WriteLine(i);
  }
}


они (сишарписты) почему-то, считают, что другой компилятор выдаст 0 и 1
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727371
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727378
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего связано с тем что в C# стековая арифметика.
В первом случае сначала пушаем на стек 0, вычисляем результат функции (0) и пушаем на стек, суммируем два значения на вершине стека: 0 + 0 = 0

Во втором сначала пушаем на стек результат функции (0), потом занчение i (которое поменялось из-за ++ на 1),уммируем два значения на вершине стека: 0 + 1 = 1.

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

авторони (сишарписты) почему-то, считают, что другой компилятор выдаст 0 и 1

Может и выдаст, а мож и не выдаст. Это ж UB.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727392
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#.
а в си++ чтоли не правильно?
функция возращает 0, но она должна выполнится до сложения, её приоритет выше.

i= i + f(i); это 1 (f уже применили) + 0
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727394
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
clihlt,
сенкс
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727415
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizфункция возращает 0, но она должна выполнится до сложения, её приоритет выше.
но никто не не запрещает получить значения других аргументов до вызова функции.

Я не большой спец в С++, подожди, пусть спецы скажут почему оно именно так считается. Возможно UB, а может и регламентировано где-то.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727420
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВозможно UB, а может и регламентировано где-то.

UB: https://en.cppreference.com/w/cpp/language/eval_order
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727425
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizDima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#.
а в си++ чтоли не правильно?
функция возращает 0, но она должна выполнится до сложения, её приоритет выше.

i= i + f(i); это 1 (f уже применили) + 0
объяснение аннулируется.

Жук доработал пример

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream>

int f (int &p){
    return p++;
}

int main(){
  int j = 0;
  int i = 0;
  i =  i+  f(i) + f(i)  ;//  +  f(i)  +  f(i)   ;
  std::cout<<i<< " ";
  i=0;
  i =   f(i) + f(i) +i ;//  +  f(i)  +  f(i)   ;
  std::cout<<i<< " ";
}


получается 3 и 2.

я бы ожидал 3 и 3
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727427
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizполучается 3 и 2.

я бы ожидал 3 и 3
5 и 100500 тоже правильные ответы потому что UB 21722924
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727430
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

пардон 2 и 3 (а не 3 и 2)
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727431
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Ttchingizполучается 3 и 2.

я бы ожидал 3 и 3
5 и 100500 тоже правильные ответы потому что UB 21722924
вы слишком широко трактуете UB в плане порядка вічисления функций.
диапазон дозволенных вариантов решений не так велик.
UB - только порядок вычислений, который может дать всего несколько разных вариантов результата.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727436
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, я ассоциативность за порядок вычислений понимал.


Dimitry Sibiryakov,

автор This is not to be confused with left-to-right and right-to-left associativity of operators: the expression f1() + f2() + f3() is parsed as (f1() + f2()) + f3() due to left-to-right associativity of operator+, but the function call to f3 may be evaluated first, last, or between f1() or f2() at run time

то есть, в любом порядке вычислятся f1, f2 и f3,
а, потом, сложение результатов идет слева - направо?
(f1() + f2()) + f3()
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727441
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizблин, я ассоциативность за порядок вычислений понимал.


Dimitry Sibiryakov,

автор This is not to be confused with left-to-right and right-to-left associativity of operators: the expression f1() + f2() + f3() is parsed as (f1() + f2()) + f3() due to left-to-right associativity of operator+, but the function call to f3 may be evaluated first, last, or between f1() or f2() at run time

то есть, в любом порядке вычислятся f1, f2 и f3,
а, потом, сложение результатов идет слева - направо?
(f1() + f2()) + f3()

если переписать выражения используя операторы то всё обьясняется. Исполнение начинается с самой внутренней функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <iostream>

int f (int &p){
    return p++;
}

int main(){
  int j = 0;
  int i = 0;

// i= i  + f(ref i);
i.operator=(f(&i).operator+(f(&i).operator+(i))));   
//     5      3       4       1        2              //2
 
// j =   f(j) + f(j) +j;
j.operator=(j.operator+(f(&j).operator+(f(&j))));     
//     5           4      2       3       1           //3
}
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727449
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcесли переписать выражения используя операторы то всё обьясняется. Исполнение начинается с самой внутренней функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <iostream>

int f (int &p){
    return p++;
}

int main(){
  int j = 0;
  int i = 0;

// i= i  + f(ref i);
i.operator=(f(&i).operator+(f(&i).operator+(i))));   
//     5      3       4       1        2              //2
 
// j =   f(j) + f(j) +j;
j.operator=(j.operator+(f(&j).operator+(f(&j))));     
//     5           4      2       3       1           //3
}



Хмм.. чушь написал
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727511
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc,
Через указатели на си тоже 2 и 3.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#include <stdio.h>
int f (int *p){
    return (*p)++;
}
void main(){
  int i = 0;
  i= i + f(&i) + f(&i);
  printf (" %d  \n", i);
 // std::cout<<i<<"\n";

  i = 0;
  i= f(&i) + f(&i) + i;
  printf (" %d  \n", i);
}



лично меня расстраивает, что теперь одним предложением нельзя объяснить,
что такое ассоциативность
В Болски я понимал, что написано - вызвать все функции и складывать слева направо,
а теперь надо неделю разбираться
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727525
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#.
+1

Оператор ++ (справочник по C#)
Оператор инкремента (++) увеличивает операнд на 1. Оператор инкремента может находиться перед своим операндом или после него: ++variable и variable++.

Примечания
Первый случай — это операция префиксного инкремента. Результатом операции является значение операнда после его увеличения.

Второй случай — это операция постфиксного инкремента. Результатом операции является значение операнда до его увеличения .
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727526
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizлично меня расстраивает, что теперь одним предложением нельзя объяснить,
Можно. Просто не нужно ассоциативности ждать там, где используются функции с побочным эффектом. Которые по определению и функциями то не являются.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727917
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут UB же ...
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727926
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39727931
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кэп, тебе не надоело повторять чужие посты двухдневной давности?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728041
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже дошло, что такое ассоциативность.
авторthis is not to be confused with left-to-right and right-to-left associativity of operators: the expression f1() + f2() + f3() is parsed as (f1() + f2()) + f3()


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include <stdio.h>


int f (int *p){
    return (*p)++;
}


void main(){
  int i = 0;
  int j;
  i= (i + f(&i)) + f(&i);    // ->>>>>> i + f(&i) + f(&i)  это 2
  printf (" %d  \n", i);
 // std::cout<<i<<"\n";

  i = 0;
  i = i +  (f(&i)  + f(&i)); //  ---->>>>   f(&i)  + f(&i) +i   это 3
  printf (" %d  \n", i);
}




i + f(&i) вычисляет 1, к которой прибавляет единица от второго вызова f(&i);


f(&i) + f(&i) вычисляет 1, к которой прибавляется двойка от i после двух вызовов f

и никакого UB

другой компилятор cpp вычислит то же самое.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728090
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь прочитай-таки следующую строчку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728093
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА теперь прочитай-таки следующую строчку.


слушаюсь

авторbut the function call to f3 may be evaluated first, last, or between f1() or f2() at run time.

ты намекаешь, что
Код: plaintext
1.
(i + f(&i)) + f(&i)  



может таки вернуть 2, а не 1?
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728094
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TФормально p++ возвращает p а затем происходит ++. ИМХО правильно работает в C#.
не может в MS работать правильно, т.к. она берёт мировые стандарты и переиначивает на свой лад
аля "а давайте сделаем тоже самое, но по-своему"
ну и поскольку это армия индусов MS, то результат немного предсказуем - получаем перекошенный новый стандарт
т.о. она никак не может сделать что-то лучше из того, что уже вылизано и стандартизировано.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728096
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это попользовать? чтобы увидеть другой результат?
автор/Gd использовать соглашение о вызовах __cdecl
/Gr использовать соглашение о вызовах __fastcall
/Gz использовать соглашение о вызовах __stdcall
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728099
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо всё дело в этом:автор"sequenced-before" is an asymmetric, transitive, pair-wise relationship between evaluations within the same thread.
т.е. выставлять порядок это усложнение
надо руками
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728100
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizэто попользовать? чтобы увидеть другой результат?

Никак, обломись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728102
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухвидимо всё дело в этом:автор"sequenced-before" is an asymmetric, transitive, pair-wise relationship between evaluations within the same thread.
т.е. выставлять порядок это усложнение
надо руками
и это правильно, т.к. у нас может быть 1+2+3, где порядок нафиг не нужен
а мб: 1-2+3, где порядок важен
тоже самое f1()+f2()+f3() - сами функции возвращают UB (могут отдать +, а могут -), так что это именно нам решать про порядок
C++ всё делает правильно.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728114
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудуху нас может быть 1+2+3, где порядок нафиг не нужен
а мб: 1-2+3, где порядок важен
А если 1+(-2)+3 то какова важность порядка?
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728129
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, такая же, имхо

кстати, в пхп ещё такое есть:
авторAND is not the same like &&

for example:

<?php $a && $b || $c; ?>
is not the same like
<?php $a AND $b || $c; ?>

the first thing is
(a and b) or c

the second
a and (b or c)

'cause || has got a higher priority than and, but less than &&

of course, using always [ && and || ] or [ AND and OR ] would be okay, but than you should at least respect the following:

<?php $a = $b && $c; ?>
<?php $a = $b AND $c; ?>

the first code will set $a to the result of the comparison $b with $c, both have to be true, while the second code line will set $a like $b and THAN - after that - compare the success of this with the value of $c
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728166
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, там имеется ввиду, что 1 - (2+3) != (1 - 2) +3
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728192
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухкстати, в пхп ещё такое есть:
ИМХО PHP проектировали знатные извращенцы.

Логическое И, оно же AND, оно же &&, оно же логическое умножение.
Логическое ИЛИ, оно же OR, оно же ||, оно же логическое сложение.
А дальше обычно так же как учили в третьем классе: сначала умножение, затем сложение.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728199
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО PHP проектировали знатные извращенцы.
евреи
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728243
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО PHP проектировали знатные извращенцы.PHP не проектировали. Он просто возник как набор скриптов на Перле для своего персонального сайта и допиливался по мере необходимости. Перл, кстати, тоже не проектировали - оно само получилось.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728284
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

порядок вызовов функций в С недетерминирован.

просто хотя бы потому, что оптимизатором вызовы могут быть (и будут в 90% простых случаев) выкинуты совсем
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728303
Фотография конечно Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizэто попользовать? чтобы увидеть другой результат?
автор/Gd использовать соглашение о вызовах __cdecl
/Gr использовать соглашение о вызовах __fastcall
/Gz использовать соглашение о вызовах __stdcall


А есть IDE свободное для c у MS?
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39728934
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно Вася,

всякие экпресс и коммунити едишны
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #39729003
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglпорядок вызовов функций в С недетерминирован.

просто хотя бы потому, что оптимизатором вызовы могут быть (и будут в 90% простых случаев) выкинуты совсем
Даже при сборке в дебаге небольшое оптимизаторство есть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
	int i = 0;
009D5B8A  mov         dword ptr [i],0  
	i = i + f(i);
009D5B91  lea         eax,[i]  
009D5B94  push        eax  
009D5B95  call        f (09D1555h)  
009D5B9A  add         esp,4  
009D5B9D  add         eax,dword ptr [i]  
009D5BA0  mov         dword ptr [i],eax  
	std::cout << i << "\n";
009D5BA3  push        offset string "\n" (09DDD00h)  
009D5BA8  mov         esi,esp  
009D5BAA  mov         eax,dword ptr [i]  
009D5BAD  push        eax  
009D5BAE  mov         ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (09E10E4h)]  
009D5BB4  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (09E10DCh)]  
009D5BBA  cmp         esi,esp  
009D5BBC  call        __RTC_CheckEsp (09D1415h)  
009D5BC1  push        eax  
009D5BC2  call        std::operator<<<std::char_traits<char> > (09D1343h)  
009D5BC7  add         esp,8  

	i = 0;
009D5BCA  mov         dword ptr [i],0  
	i = f(i) + i;
009D5BD1  lea         eax,[i]  
009D5BD4  push        eax  
009D5BD5  call        f (09D1555h)  
009D5BDA  add         esp,4  
009D5BDD  add         eax,dword ptr [i]  
009D5BE0  mov         dword ptr [i],eax  
	std::cout << i;	return 0;

...
Рейтинг: 0 / 0
Период между сообщениями больше года.
выполнить пример с инкрементом не на компиляторе MS ++
    #40109908
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это нормально, что на примере
Код: plaintext
1.
2.
3.
  int s = 0;
  s = s++;
  cout << s;



g++ выдает 0,
а ms 19 года выдает 1?
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40109910
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz
это нормально, что на примере
Код: plaintext
1.
2.
3.
  int s = 0;
  s = s++;
  cout << s;




g++ выдает 0,
а ms 19 года выдает 1?
неопределенное поведение:
авторBecause of the side-effects involved, built-in increment and decrement operators must be used with care to avoid undefined behavior due to violations of sequencing rules.
так что просто не надо такой код писать.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40109912
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN

так что просто не надо такой код писать.

это я догадываюсь.
Я полазил по ссылкам Зива
нашел авторi = i++ + 1; // undefined behavior
мой пример проще, решил переспросить.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40109914
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, ссылки Сибирякова
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40109929
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingiz
это нормально, что на примере
Код: plaintext
1.
2.
3.
  int s = 0;
  s = s++;
  cout << s;



g++ выдает 0,
а ms 19 года выдает 1?
Какой используется стандарт ты нам, конечно, не скажешь.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40109930
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaN
tchingiz
это нормально, что на примере
Код: plaintext
1.
2.
3.
  int s = 0;
  s = s++;
  cout << s;




g++ выдает 0,
а ms 19 года выдает 1?
неопределенное поведение
В C++17+ определённое.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40110167
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
tchingiz
это нормально, что на примере
Код: plaintext
1.
2.
3.
  int s = 0;
  s = s++;
  cout << s;



g++ выдает 0,
а ms 19 года выдает 1?
Какой используется стандарт ты нам, конечно, не скажешь.



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include <iostream> 
using namespace std; 
int main() {
    int s = 0;
    s = s++;
    cout<<s<<'\n'<< __cplusplus;
    return 0;
}


Код: plaintext
1.
2.
0
201703

https://overcoder.net/q/135824/предопределенный-макрос-c-11

g++ (GCC) 11.1.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40110195
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingiz
201703
Ну так значит 0 вполне гарантирован.
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40110211
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN
tchingiz
это нормально, что на примере
Код: plaintext
1.
2.
3.
  int s = 0;
  s = s++;
  cout << s;




g++ выдает 0,
а ms 19 года выдает 1?
неопределенное поведение:

Ваше слово, товарищ маузер!
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40110294
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizВаше слово, товарищ маузер!

"ms 19-го года" не поддерживает стандарт С++17. Сурпрайз?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
выполнить пример с инкрементом не на компиляторе MS ++
    #40110910
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

tchingizВаше слово, товарищ маузер!

"ms 19-го года" не поддерживает стандарт С++17. Сурпрайз?..

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


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