1. C++ / Говнокод #12956

    +10

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    static int
          _S_compare(size_type __n1, size_type __n2)
          {
      const difference_type __d = difference_type(__n1 - __n2);
    
      if (__d > __gnu_cxx::__numeric_traits<int>::__max)
        return __gnu_cxx::__numeric_traits<int>::__max;
      else if (__d < __gnu_cxx::__numeric_traits<int>::__min)
        return __gnu_cxx::__numeric_traits<int>::__min;
      else
        return int(__d);
          }

    Запостил: LispGovno, 01 Мая 2013

    Комментарии (20) RSS

    • и в чем вы видите здесь проблему?
      Ответить
      • __никакой_проблемы::__тут_нет<__и>::__не _будет
        Ответить
        • ну код из недр STL так и должен выглядеть
          но на кой ляд, сравнивая два size_type (вероятно, 64-битных), получать 32-битный int в виде их разницы...
          Ответить
          • Накой ляд использовать __gnu_cxx::__numeric_traits, когда есть стандартный std::numeric_limits.
            Ответить
            • Ну, видимо, std::numeric_limits выражен через __gnu_cxx::__numeric_traits, а т.к. этот код внутренний, то он и юзает внутренние типы...

              P.S. __или_просто::__слишком_мало<подчеркиваний>::__в_тексте.
              Ответить
              • Как говорят здесь:
                http://gcc.gnu.org/ml/libstdc++/2007-04/msg00106.html
                Чтобы не тянуть весь limits который даёт +30 кб.
                Ответить
                • Вот сделали бы для целочисленных типов также через энум по стандарту, чтобы max был известен во время компиляции.
                  Ответить
                  • ты про типизированный енум из с++11?
                    Ответить
                    • Да в старом стандарте могли бы сделать static const integral_type max=...;. А то приходится в рантайме вместо компайлтайма проверять граничное условие, так как в std::numeric_limits функция.
                      Я даже за если бы это был отдельный трейт для целых типов типа std::integral_limits или std::integer_limits, кроме стандартного с функциями.

                      В итоге в gcc с его numeric_traits так и сделали как я говорю, но стандарт неумолим, так что в своем коде этим пользоваться нельзя, поэтому приходится компайлтайм проверки переносить в рантайм. Глупо.
                      Ответить
                    • Кстати, типизированный энум может во float типы?
                      Ответить
                      • The type-specifier-seq of an enum-base shall name an integral type; any cv-qualification is ignored.
                        Ответить
                        • Небось по памяти стандарт уже цитируешь. Тебе в интел нужно идти, а не на говнокоде сидеть. Кстати, говорят его купил эпл?
                          Ответить
                          • нет, говнокод никто не купил, он бесценный
                            в стандарт лезу только когда надо найти ответы на твои вопросы
                            Ответить
                            • http://www.mondaynote.com/2013/04/29/apple-buys-intel/
                              Ответить
                            • > в стандарт лезу
                              Все равно ты очень крут. Подумай над моим предложением.
                              Ответить
                              • >> Тебе в интел нужно идти
                                > Подумай над моим предложением.
                                Так ты, оказывается, интеловский HR и ищешь тут новых работников? :)
                                Ответить
                              • Вещуньина с похвал вскружилась голова,
                                От радости в зобу дыханье сперло, -
                                И на приветливы Лисицыны слова
                                Ворона каркнула во все воронье горло
                                Ответить
                          • >Небось по памяти стандарт уже цитируешь.
                            Дописывает свой стандарт, отвечая на вопросы юзверей.
                            Ответить
                  • Так он и так constexpr вроде как.
                    Ответить

    Добавить комментарий