На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (5) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> == 0 ИЛИ !, C++
   
== 0 ИЛИ !
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    В продолжение темы сложного выбора. Обращаю внимание, что речь снова о C++. Примеры, надеюсь, не потребуются
    char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
    for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


    user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
      Потребуются, ибо выбора между сравнением с нулём и логическим "не" никогда не было. В плюсах, в смысле.
        Зависит от ситуации. Что понятнее, то и использую. Это не Python, издержек на сравнение с 0 нет
        Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
          Цитата negram @
          Потребуются, ибо выбора между сравнением с нулём и логическим "не" никогда не было. В плюсах, в смысле.

          Это не выбор между нулём и НЕ, это выбор между двумя семантиками проверки нулевого значения
          char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
          for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


          user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
            Когда работаешь с числами - удобнее наверное на 0 проверять. Например делитель числа.
              Цитата KILLER @
              удобнее наверное на 0 проверять

              Так наверное или удобнее? :) Сам-то что используешь и в каких ситуациях?
              char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
              for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


              user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                Цитата B.V. @
                Так наверное или удобнее? :) Сам-то что используешь и в каких ситуациях?

                Я голоснул за восклицательный знак. Но вообще делитель я бы проверял с помощью if a == 0 togda error, с указателями и прочим юзал бы if !pointer togda error
                  Цитата KILLER @
                  Но вообще делитель я бы проверял с помощью if a == 0 togda error

                  Что-то вспомнилась картинка
                  user posted image
                  char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                  for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                  user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                    Цитата B.V. @
                    Что-то вспомнилась картинка

                    Последний вариант прокатит разве что в скриптовых языках или в каком нибудь C# с Java, а в С++ выхватишь Access Violation.
                      Цитата KILLER @
                      а в С++ выхватишь Access Violation

                      Да нет, выхватишь UB.
                      char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                      for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                      user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                        Цитата B.V. @
                        Да нет, выхватишь UB.

                        Незнаю что там на счет UB. Может в новом стандарте UB будет, помню у Страуструпа вроде было написано что деление на 0 приведет к аппаратной ошибке процессора, и соответственно обрабатывать такую ошибку нужно с помощью какого нибудь SEH исключения. Стандартные исключения ловят только программные ошибки, и надеяться на то что catch отловит деление на 0 глупая затея.

                        Добавлено
                        Хотя помню компилятор майкрософт в дебаге ловит деление на ноль. В релизе хз.
                          Только "!" использую. Ибо вещали (сильно давно), что операция CMP (асм-реализация "==0") крайне тормознутая, а "test" (в случае ! используется, бывает) существенно быстрее!
                            Цитата Славян @
                            Только "!" использую. Ибо вещали (сильно давно), что операция CMP (асм-реализация "==0") крайне тормознутая, а "test" (в случае ! используется, бывает) существенно быстрее!

                            Не представляю даже, как бы ты на явошарпах с питонами писал бы. Повесился наверное раньше :D
                              Цитата B.V. @
                              Цитата negram @
                              Потребуются, ибо выбора между сравнением с нулём и логическим "не" никогда не было. В плюсах, в смысле.

                              Это не выбор между нулём и НЕ, это выбор между двумя семантиками проверки нулевого значения

                              Не было никогда такого выбора в плюсах. Выбор мог быть только у тех, кто воспринимает плюсы как "си с классами". благо, такие уже лет 10-15 как вымерли. :-?
                                Цитата Славян @
                                Ибо вещали (сильно давно), что операция CMP (асм-реализация "==0") крайне тормознутая, а "test" (в случае ! используется, бывает) существенно быстрее!
                                Для сравнения с нулём CMP никогда не использовался. Даже в простейших компиляторах Small-C и Rat-C сравнение с нулём обрабатывалось отдельно от общего случая.
                                Так что тебе лапшу на уши вешали.
                                Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1393 ]   [ 19 queries used ]   [ Generated: 20.07.19, 20:00 GMT ]