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

    +11

    1. 1
    2. 2
    const listee* const nullablya = static_cast<listee*>(lst1);
    if(nullablya == NULL)

    Запостил: LispGovno, 12 Июля 2013

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

    • > listee
      Мне кажется автор угарел по boost::pointee (pointee, разве есть такое слово в английском?)

      > if(nullablya == NULL)
      Если lst1 когда и был равен NULL, то явно не после того, как несколько раз static_castами сдвинули указатель на пару байт.
      Ответить
      • > pointee, разве есть такое слово в английском?
        Конечно есть. Найди закономерность сам:
        - employer / employee
        - interveiwer / interviewee
        - pointer / pointee
        Ответить
        • - lister / listee
          Ответить
        • > Конечно есть
          Сегодня услышал слово huntee (а мне могло послышаться что угодно). В гуглтранслейте проверил. Нет не huntee, нет ни pointee.
          Ответить
          • Да у них в разговорной речи вроде можно к любому существительному приписать -er или -ee или даже -ed, и все тебя поймут, даже если такого сочетания никогда не было в словаре ;)

            He was literally c++ed by his compiler :)
            Ответить
            • > -ed, и все тебя поймут
              > c++ed
              Если бы я сам только понял что хотел сказать... Изнасилован крестами? С++ головного мозга? Крестодеформирован?
              Ответить
              • http://www.mirf.ru/Articles/14/2826/exorcism.jpg
                Ответить
              • А я и сам не понял, чего я хотел этим сказать... Что-то типа " кресты вынесли ему мозг".

                > С++ головного мозга? Крестодеформирован?
                Ну примерно об этом я и думал, когда писал ;)
                Ответить
                • Окрестована отплюсована
                  Крестоблядством когда-то повенчана
                  Ответить
                  • сделай мир светлее.
                    Ответить
                    • World.Brightness.Inc();
                      Ответить
                      • selfthis.Die();
                        World.Brightness.Inc();
                        fixed/
                        Ответить
                      • World Brightness, Inc.
                        Ответить
                        • О, точно. Борманд, давай мутить бизнес - ты на жабе, я на шарпе.... А потом построим космический корабль, отправим его на Альфа Центавра и добьемся научной победы
                          Ответить
                          • Ты на шарпе я на жабе.
                            Мы не встретимся никак.
                            Ответить
                            • ну я могу писать службы на WCF а ты обработчики на жабе...
                              Ответить
                      • let world = world.Brightness.Inc()
                        Ответить
      • > > listee
        > boost::pointee

        Вероятно, это ListEnterpriseEdition.
        Ответить
        • > boost::pointee
          PointEnterpriseEdition
          Точка смелого редактирования?
          Ответить
          • Ускорение :: точки смелого редактирования
            Ответить
            • а двойное двоеточие :: на самом деле - торцы векторов поля сил, направленного от пользователя, смотрящего в монитор
              Ответить
      • > явно не после того, как несколько раз static_castами сдвинули указатель на пару байт
        https://ideone.com/SUIlkL
        Ответить
        • Это UB и в студии сдвигает стасиккаст
          Ответить
          • Визуалкопроблемы?

            5.2.9. Static cast, пункт 9
            An rvalue of type “pointer to cv1 B,” where B is a class type, can be converted to an rvalue of type “pointer to cv2 D,” where D is a class derived (clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists (4.10), cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is not a virtual base class of D. The null pointer value (4.10) is converted to the null pointer value of the destination type. If the rvalue of type “pointer to cv1 B” points to a B that is actually a subobject of an object of type D, the resulting pointer points to the enclosing object of type D. Otherwise, the result of the cast is undefined.

            P.S. Или я неправильно понимаю этот текст?
            Ответить
            • P.P.S. Вот открыл ман от вижуалки http://msdn.microsoft.com/en-us/library/c36yw7x9%28v=vs.80%29.aspx.
              void f(B* pb) {
                 D* pd1 = dynamic_cast<D*>(pb);
                 D* pd2 = static_cast<D*>(pb);
              }
              If pb really points to an object of type D, then pd1 and pd2 will get the same value. They will also get the same value if pb == 0 (а мы знаем, что динамик каст от нулла возвращает нулл).

              Хер бы с ним со стандартом, но неужели визуалка не следует даже своему ману?
              Ответить
          • Выкопал 2005ю вижуалку, попробовал свой пример - вывело нулл а не -4.

            Если у кого есть возможность (Тарас, ты тут?), проверьте плиз на говне мамонта студии 2003 или 98 года выпуска. Существует вероятность, что это был баг в реализации статик каста на тех визуалках.

            P.S. guest, ты на 100% уверен в том, что это UB, и что вижуалка действительно иногда себя так ведет?

            P.P.S. Даже в шестом говнобилдере выводятся нули.
            Ответить
      • показать все, что скрыто???????
        Ответить
    • > nullablya
      Нулябля? nullable
      Ответить
    • https://ideone.com/Jz7vR1
      Ответить
      • Так вот какую ситуацию имел в виду автор кода: https://ideone.com/2oZhmF !
        Ответить
        • А как такое могло случится?
          Ответить
          • Статик каст для данных классов работает примерно так:
            return p ? p - 4 : 0
            Поэтому если исходный указатель был равен четырем, статик каст вернет 0.
            Ответить
            • Добавьте в B1 еще полей и сдвиг будет другой. А в вашем случае d2 просто не может быть размещен по адресу 4.
              Ответить
              • > Добавьте в B1 еще полей и сдвиг будет другой.
                Ну я поэтому и написал "для данных классов". Будет другой сдвиг - другой адрес будет превращаться в нулл. Это неизбежно ;)
                Ответить
      • показать все, что скрытоЯ АНДРЕЙ-ГЕЙ, ИЩУ НЕМАНЕРНОГО ПАРНЯ ИЗ ПИТЕРА ДЛЯ СЕКСА БЕЗ ОБЯЗАТЕЛЬСТВ НА ОДИН-ДВА РАЗА. ЛЮБЛЮ НОСИТЬ ЖЕНСКОЕ БЕЛЬЕ.
        ПИШИТЕ, ЗВОНИТЕ: 79046468333. СТРАНИЦА В ВК: vk.com/id41556
        Ответить
    • stylish!
      Ответить
    • Говнолисп, удалой молодец, продолжает собирать почитателей своего таланта.
      Ответить
      • какого таланта?
        Ответить
        • очевидно делать говно (в простонародье: срать)
          Ответить
        • показать все, что скрытоЯ АНДРЕЙ-ГЕЙ, ИЩУ НЕМАНЕРНОГО ПАРНЯ ИЗ ПИТЕРА ДЛЯ СЕКСА БЕЗ ОБЯЗАТЕЛЬСТВ НА ОДИН-ДВА РАЗА. ЛЮБЛЮ НОСИТЬ ЖЕНСКОЕ БЕЛЬЕ.
          [COLOR=BLUE]СОСУ ХУИ[/color][COLOR=BLACK]ДАЮ В ЖОПУ[/color][COLOR=GREEN]ДЕЛАЮ МИНЕТЫ[/color][COLOR=RED]
          ПИШИТЕ, ЗВОНИТЕ: 79046468333. СТРАНИЦА В ВК: vk.com/id41556
          [/color]
          Ответить
    • показать все, что скрыто???????
      Ответить
      • Молодец, друг. Хорошо нафлудил. Уважаю.
        Ответить
        • показать все, что скрытоЯ АНДРЕЙ-ГЕЙ, ИЩУ НЕМАНЕРНОГО ПАРНЯ ИЗ ПИТЕРА ДЛЯ СЕКСА БЕЗ ОБЯЗАТЕЛЬСТВ НА ОДИН-ДВА РАЗА. ЛЮБЛЮ НОСИТЬ ЖЕНСКОЕ БЕЛЬЕ.
          [COLOR=BLUE]СОСУ ХУИ[/color][COLOR=BLACK]ДАЮ В ЖОПУ[/color][COLOR=GREEN]ДЕЛАЮ МИНЕТЫ[/color][COLOR=RED]
          ПИШИТЕ, ЗВОНИТЕ: 79046468333. СТРАНИЦА В ВК: vk.com/id41556
          [/color]
          Ответить
    • Пашка стал целовать меня, не дав мне договорить, да и так все было понятно. Я обнял его за шею и прижал к себе. Наши, еще не успевшие опомниться, члены впервые соприкоснулись и мы снова возбудились. Мы начали распаляться друг у друга в объятиях, ощущение горячего твердого предмета упирающегося тебе в живот просто мутило рассудок. Мы снова стали кататься по пляжу и песок прилип к залитым спермой телам. Нужно было помыться. Вода была теплой, но выходить на берег было уже холодно - сумерки уже совсем сгустились. Мы обнимались стоя по плечи в реке. Наши руки бродили по бедрам друг друга и между бедер, и сзади, и спереди.
      Ответить

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