На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (5) 1 2 [3] 4 5  все  ( Перейти к последнему сообщению )  
> == 0 ИЛИ ! , C++
   
== 0 ИЛИ !
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Цитата Polinom2686 @
    Я выбираю первый

    Цитата Славян @
    А я - только второй

    Воу-воу, погодите до отдельной голосовалки :D
      Здесь пока - фифти-фифти; в той отдельной думаю, что Полином2pentPro будет с перевесом (по количеству виденых мною исходников...). :yes-sad:
        Вот и правильно, Славян. А то для }, вишьли, отдельная строка, потому что заканчивает блок, а { почему-то скромненько спаривается с заголовком, что к последующему блоку не имеет никакого отношения, кроме обоснования его наличия.
        Сообщение отредактировано: Qraizer -
          Да, а я как бы согласен с вами, Qraizer, но всё равно мне чертовски жаль, что на фигурки уходит две строчки. Ничего тут не могу поделать! Горе, непреодолимое, и всё тут. :'( :'( :'(
            Цитата Славян @
            Да, а я как бы согласен с вами, Qraizer, но всё равно мне чертовски жаль, что на фигурки уходит две строчки. Ничего тут не могу поделать! Горе, непреодолимое, и всё тут.

            Не слушай Qraizer'а - переходи на светлую сторону Силы! :lol: Одну строчку можно сэкономить - используй Java Style.
              Сокрытие строки не есть светлая сторона, а токмо тёмная! :angry:
                Цитата Polinom2686 @
                Я выбираю первый вариант


                ExpandedWrap disabled
                  func :: ArgType -> ReturnType
                  func arg = statement


                Problems? :crazy:
                  Цитата Славян @
                  Сокрытие строки

                  не сокрытие - а экономия! не халявщик - а партнер! :lol:
                    Единственным выходом из непреодолимой ситуации вижу только такой: если весь блок вычислений находится правее if'а (for'а, while'а, ...), то компилер бы его сам заключал в фигурные скобки! И экономия и красота, но... мечты?..
                      Цитата JoeUser @
                      И экономия и красота, но... мечты?..

                      Переходи на питон :)
                        терпеть не могу ! в начале
                        ExpandedWrap disabled
                          if (a ...)
                          if (b ...)
                          if (!c ...)

                        неровненько... <_<
                        Сообщение отредактировано: wind -
                          А я вот так пишу:
                          ExpandedWrap disabled
                            if ( a ...)
                            if ( b ...)
                            if (!c ...)
                          А ещё
                          ExpandedWrap disabled
                            a = ...
                            b =(...)
                            c+= ...
                          итп.
                            Так и не должно быть ровненько! Строки вида "if( a...)" несут суть опосля переменной (вида "if( a!=...)"), а строки же с отрицанием сразу утверждают нечто "if( !c )". Разная идеология! В первых вариантах "a" сравнится с чем-то/с какой-то субстанцией, а в отрицании ужо сказано, что всё тут двоичное грядёт. Так что - норм!! :yes: :yes:
                              Цитата Славян @
                              Только "!" использую. Ибо вещали (сильно давно), что операция CMP (асм-реализация "==0") крайне тормознутая, а "test" (в случае ! используется, бывает) существенно быстрее!

                              ЛОЛШТО?
                              ExpandedWrap disabled
                                bool foo1(int a) {
                                    return a == 0;
                                }
                                 
                                bool foo2(int a) {
                                    return !a;
                                }

                              компилируется в
                              ExpandedWrap disabled
                                foo1(int):
                                        test    edi, edi
                                        sete    al
                                        ret
                                foo2(int):
                                        test    edi, edi
                                        sete    al
                                        ret

                              Пруф - https://godbolt.org/g/oKkN1v
                                Да, я тоже только что проверил на типичном примере, и вижу, что оба случая (при настройках оптимизации в максимум) реализуются через test. Но это лишь говорит о том, что оптимизатор понял, что test (делает AND по сути ;) ) быстрее довольно туповатого и прямого CMP! Так что всё норм! :yes: :yes: :yes:

                                Добавлено
                                Более того, посмотрел на Release и Debug варианты и что видим:
                                Release: test reg32, reg32
                                Debug: cmp dword ptr [], 0
                                Итог: ! быстрее ==0 при их прямом переводе на маш. код! ч.т.д. :tong:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (5) 1 2 [3] 4 5  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0439 ]   [ 18 queries used ]   [ Generated: 29.03.24, 14:36 GMT ]