drx>Здравствуйте, Axc, Вы писали:
drx>Ты не мог бы подробнее написать, какой фрагмент кода тебя смутил и почему?
Всего лишь стиль.
Строка "T* const result = q == p ? p : q;" эквивалентна гораздо более простой строке "T* const result = q;" Но для работы кода это не существенно.
Здравствуйте, drx, Вы писали:
drx>Здравствуйте!
drx>Только что разговаривали с коллегой о всяких макро-пакостях в C++. Придумали такой вариант: drx>
drx>// Put this to some secluded nook
drx>template< typename T >
drx>T* B6085443BCE84d0489BD76C74663E951( T* p )
drx>{
drx> static T* q = p;
drx> T* const result = q == p ? p : q;
drx> q = p;
drx> return result;
drx>}
drx>#define this B6085443BCE84d0489BD76C74663E951( this )
drx>// Happy debugging!
drx>
Здравствуйте, Axc, Вы писали:
drx>>Ты не мог бы подробнее написать, какой фрагмент кода тебя смутил и почему? Axc>Всего лишь стиль. Axc>Строка "T* const result = q == p ? p : q;" эквивалентна гораздо более простой строке "T* const result = q;" Но для работы кода это не существенно.
Это не стиль — нафиг такие стили, это я протупил, извини. И упорно не хотел понимать, в чём дело. Позор мне!
Код, который я запостил, сначала был немного более сложным. Но перед тем, как отослать его на rsdn я немного сократил его, решив, что и так будет неплохо. В коде, который я не запостил, это условие имело смысл. После рефакторинга оно превратилось в "q == p ? p : q", а я не распознал, что оно теперь эквивалентно "q", т.к. дальше продолжал думать о нем как об условном выражении.
Надо будет приучить свои глаза при рефакторинге замечать шаблон "q == p ? p : q", чтобы преобразовывать его в "q".
Спасибо, что у тебя хватило терпения объяснить мне ошибку
Здравствуйте, drx, Вы писали:
drx>Здравствуйте, Axc, Вы писали:
drx>>> T* const result = q == p ? p : q; Axc>>Я чего-то не того. result = q?
drx>Нет. drx>Это выражение компилится так, как будто бы оно выглядело следующим образом: drx>
drx>T* const result = ((q == p) ? p : q);
drx>
drx>RTFM, вобщем. Боюсь, что придётся копаться в грамматике языка, т.к. AFAIR Страсутруп в своей книге не стал объяснять подобный случай, а сразу отослал к грамматике.
Здравствуйте, drx, Вы писали:
drx>Проблема приведённого мной варианта в том, что дебаггер вполне может зайти в темплейт, и тогда правда быстро вылезет наружу. drx>Приведённый ниже вариант лишён этого недостатка: drx>
drx>#define this (this && __LINE__ % 10 == 1 ? this + 1 : this)
drx>
drx>P.S.: Всё-таки утром лучше думается
это мне напоминает старый баян:
#define true (rand() % 123)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, anonim_44ax, Вы писали:
I>>>>Если охото напакастить, то можно гораздо более изощерено придумать. _>>>Ну так придумайте.
VM>>Так ведь сказал же уже "Неохота..." _>Значицца понты кидаем, батенька.
Я понимаю русский и английский.
По фене не ботаю.
.
Это я Вас как математик математика спрашиваю:
Что такое математика?
Один из законов Божьих или это сам Бог и есть? (ХХ век)
Здравствуйте, Sni4ok, Вы писали:
S>забавно, но это помоему быстро обнаруживаемый жучок, S>а вот скажем такой S>
S>T* B6085443BCE84d0489BD76C74663E951( T* p )
S>{
S>static T* q = p;
S>return q;
S>}
S>#define this B6085443BCE84d0489BD76C74663E951( this )
S>
S>имел бы шансы дожить до заказчика
IMHO, всё зависит от контекста — в насколько "глобальный" хидер ты его запихнёшь и вообще, как повезёт. Например, при вставке исходного варианта в precompiled header проекта до всех инклудов, моя прога не смогла даже стартануть — сразу вылетела. Вставил после инклудов и наблюдал забавный эффект: до поры до времени всё работает нормально, но как только на экране появляются pop-up меню, которые, в свою очередь, создаются с помощью visitor'ов, возникает ощущение, что у тебя плавно едет крыша — всё перепутано (следствие надругательства над строками вида visitor.accept( *this )).
Вобщем, всё равно придётся поработать над подбором хорошего места или подходящего класса (воспользоваться перегрузкой) в конкретном проекте.
Здравствуйте, drx, Вы писали:
drx>Здравствуйте!
drx>Только что разговаривали с коллегой о всяких макро-пакостях в C++. Придумали такой вариант: drx>
drx>// Put this to some secluded nook
drx>template< typename T >
drx>T* B6085443BCE84d0489BD76C74663E951( T* p )
drx>{
drx> static T* q = p;
drx> T* const result = q == p ? p : q;
drx> q = p;
drx> return result;
drx>}
drx>#define this B6085443BCE84d0489BD76C74663E951( this )
drx>// Happy debugging!
drx>
Гораздо пакостнее было бы возвращать предыдущую ссылку не всегда, а, скажем, с вероятностью 1%. Но это жестоко.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.