- 1
if (!this) return;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+57
if (!this) return;
inkanus-gray 05.09.2014 23:40 # +1
Soul_re@ver 05.09.2014 23:51 # +4
bormand 06.09.2014 07:39 # +1
Soul_re@ver 06.09.2014 08:24 # 0
http://blogs.msdn.com/b/oldnewthing/archive/2014/06/27/10537746.aspx
bormand 06.09.2014 09:45 # 0
Soul_re@ver 06.09.2014 15:40 # 0
someone 06.09.2014 10:00 # 0
bormand 06.09.2014 10:55 # 0
absolut 06.09.2014 11:01 # +3
... The expression E1->E2 is converted to the equivalent form (*(E1)).E2;...
т.е. разыменование нуля - UB
TarasB 06.09.2014 11:53 # +4
что там для метода разыменовывать?
absolut 06.09.2014 12:12 # +3
... If E2 is a (possibly overloaded) member function...
TarasB 06.09.2014 12:36 # +2
если только он не виртуальный
bormand 06.09.2014 12:41 # 0
TarasB 06.09.2014 12:45 # 0
absolut 06.09.2014 13:05 # +3
3.14159265 06.09.2014 15:49 # 0
3.14159265 06.09.2014 15:59 # −1
Плюс эта функция может быть статичной, а может и не быть.
If E2 is a (possibly overloaded) member function, function overload resolution (13.3) is used to determine whether E1.E2 refers to a static or a non-static member function.
If it refers to a static member function and the type of E2 is “function of parameter-type-list returning T”, then E1.E2 is an lvalue; the expression designates the static member function. The type of E1.E2 is the same type as that of E2, namely “function of parameter-type-list returning T”.
Otherwise, if E1.E2 refers to a non-static member function and the type of E2 is “function of parameter-type-list cv ref-qualifieropt returning T”, then E1.E2 is a prvalue. The expression designates a non-static member function. The expression can be used only as the left-hand operand of a member function call (9.3). [ Note: Any redundant set of parentheses surrounding the expression is ignored (5.1). — end note ] The type of E1.E2 is “function of parameter-type-list cv returning T”.
Экая гомосятина ваши кресты. С ума можно сойти.
TarasB 06.09.2014 18:54 # +1
kegdan 06.09.2014 10:31 # 0
Xom94ok 06.09.2014 09:19 # +3
Отлично помню, какое это произвело на меня впечатление. Будто глаза открылись на C++.
3.14159265 06.09.2014 15:41 # 0
Там всего 4 буквы. А мог ведь срач и на 100+ постов разгореться при нужной фазе луны и достаточном числе желающих поспорить.
Кстати та крестоконструкция и сейчас меня приводит в некий ступор.
Xom94ok 06.09.2014 16:19 # +2
А таким образом оказалось проще всего поправить все места, где есть обращения к структуре; точнее, не поправлять их вообще. Структура выделялась на стеке и жила весь жизненный цикл программы, а стека было очень мало - 32 килобайта, что ли? Сигсегв, короче, в некоторых местах вылезал.
TarasB 06.09.2014 18:58 # +1
inkanus-gray 09.09.2014 19:29 # 0
Особенно код Борманда.
Psionic 09.09.2014 17:43 # 0
Пэ.Сэ. Особо нежный ароматъ сему говну придастъ если функцъия азъ виртуальна будетъ.