На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (5) 1 [2] 3 4 ... Последняя » все  ( Перейти к последнему сообщению )  
> == 0 ИЛИ !, C++
   
== 0 ИЛИ !
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Увы, но у меня и сейчас MSVS 2017 так жедает (CMP) без настроек ускорения/оптимизации. :yes-sad:
      Ну, видимо так M$ понимает понятие оптимизации. Раз нет оптимизации, значит нельзя даже мелочи оптимизировать.
      Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
        (x == 0).toString().length() == 4 :crazy:

        Добавлено
        А вообще фигня холивар. Даёшь табы vs пробелы :yes:

        Добавлено
        Цитата Славян @
        Увы, но у меня и сейчас MSVS 2017 так жедает (CMP) без настроек ускорения/оптимизации.

        У тебя странная студия. У меня она даже в дебаге test-ом сравнивает. В релизе с оптимизациями тем более.
        Подпись была включена в связи с окончанием срока наказания
          Цитата OpenGL @
          Даёшь табы vs пробелы

          Так уже давно холивар закрыт.

          http://intellindent.info/seriously/

          Проблема только в том, что инструментарий (IDE, редакторы) не умеют в грамотный индент табами с выравниванием пробелами, поэтому приходится деградировать до all-spaces.
            Так нечестно. Я это должен был выложить это в качестве аргумента того, что сторонники пробелов не умеют пользоваться табами :(
            Цитата Da$aD @
            Проблема только в том, что инструментарий (IDE, редакторы) не умеют в грамотный индент табами с выравниванием пробелами, поэтому приходится деградировать до all-spaces.

            Я для этого пользуюсь astyl-ом, автоматически запускаемым при сохранении файла. Он в абсолютном большинстве случаев отличает, когда надо использовать alignment, а когда - indentation - в целом меня вполне устраивает. Пример из статьи отформатировал он правильно.
            Подпись была включена в связи с окончанием срока наказания
              Цитата OpenGL @
              Даёшь табы vs пробелы

              Слабо. Даже
              ExpandedWrap disabled
                () {
                }

              vs
              ExpandedWrap disabled
                ()
                {
                }

              как-то, ИМХО, интереснее :)

              Добавлено
              Между тем, мнения в голосовалке разделились почти поровну. Не ожидал..
              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. @
                мнения в голосовалке разделились почти поровну
                Всё просто: каждой ситуации своё предпочтение. Если переменная хранит признак, то ! в самый раз, а если число, то == 0. Просто это не каждый сформулировать догадывается.
                Одни с годами умнеют, другие становятся старше.
                  Цитата Qraizer @
                  Если переменная хранит признак, то ! в самый раз, а если число, то == 0.

                  Если переменная объявлена но не определена?
                  Или в условии задачи она точно определена?

                  Добавлено
                  Цитата B.V. @
                  это выбор между двумя семантиками проверки нулевого значения

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

                    Все эти "крайне" и "существенно" сильно преувеличены. Регистровые операции cmp r,i и test r,r исполняются одинаково быстро. Разница между ними в размере команды, что косвенно\теоретически может сказаться на задержке их декодирования, да и то только при при определенных "неблагоприятных обстоятельствах". Причем в х86 есть укороченный вариант команды сравнения cmp r/m,i8 с однобайтовой константой, автоматически расширяемой знаком до размера операнда. Соотв-но нормальный (не тупой) компилятор для сравнения с нулем должен использовать именно этот вариант (а не общий, когда размер константы совпадает с размером операнда). Зато cmp на современных x86 имеет преимущество перед test r,r при сравнении операнда в памяти (когда окружающий код не требует его загрузки в регистр), т.к. одна команда cmp m,i8 и декодируется, и все in-order стадии конвеера проходит быстрее, чем пара команд mov r,m + test r,r (хотя на практике разницы может и не быть, т.к. все зависит от окружающего кода, "ветра", "фаз луны" и т.д.).
                      Цитата B.V. @
                      Это не выбор между нулём и НЕ, это выбор между двумя семантиками проверки нулевого значения

                      А почему не между двумя семантиками проверки булевого значения?
                      “Object-oriented design is the roman numerals of computing.” — Rob Pike
                      All software sucks
                        Цитата korvin @
                        А почему не между двумя семантиками проверки булевого значения?

                        Потому что думаю, что выбор был бы слишком предсказуем: подавляющее большинство выбрало бы вариант !. А вот с численными значениями интереснее
                        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 Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                          Цитата korvin @
                          А почему не между двумя семантиками проверки булевого значения?
                          Булевы значения вообще не принято сравнивать. Ещё в C, где вместо них использовались целые, сравнение признака с нулём считалось плохим стилем, если не ошибкой. А сравнение с TRUE (макрос, равный единице) было именно ошибкой.
                          Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                            Цитата B.V. @
                            Слабо. Даже

                            () {
                            }

                            vs

                            ()
                            {
                            }

                            как-то, ИМХО, интереснее

                            Я выбираю первый вариант :)
                              Для сравнения числовых значений - использую "==", для булевских просто проверка или проверка с отрицанием.
                              Для форматирования C/C++ кода все ж использую JavaStyle. Для меня он кажется более компактным и лучше читаемым.
                              Мои программные ништякиhttp://majestio.info
                                Цитата Polinom2686 @
                                Я выбираю первый вариант
                                А я - только второй; по-моему даже в 100% случаев. :yes:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,2263 ]   [ 19 queries used ]   [ Generated: 22.10.19, 17:04 GMT ]