Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Category:

с чего вызывается функция

(для программистов)

How C++ Resolves a Function Call

Увлекательный пересказ того, как компилятор C++ находит правильную функцию, которую надо вызвать, когда в коде вызывается функция. Как шаблоны/перегрузки/пространства имен все друг с другом переплетаются итд.

К некоторому своему смущению понял во время чтения, что я не знал про такую штуку, как ADL - по крайней мере не помню, чтобы хоть когда-то сознательно пользовался или учитывал при чтении кода. ADL - это когда написан вызов foo(bar), а переменная bar при этом принадлежит типу из какого-то пространства baz::, и сам этот факт заставляет компилятор брать в качестве кандидата функцию baz::foo, если такая существует - хотя вызов происходит вне этого пространства.

Теперь, после прочтения этой записи (а также супер-подробного разбора ADL) понимаю, что именно так работает поддержка << в iostream с аргументами из пространств типов; или, например, std::swap. Так что выходит, что я много раз пользовался ADL, просто не задумывался над тем, как компилятор находит мою функцию. Чувствую себя, как герой Мольера, узнавший, что всю жизнь говорил прозой.
Tags: программирование
Subscribe

  • я не могу иначе

    Просто потому, что мне очень нравится эта песня и это исполнение. Немного подсел на это видео в последние дни.

  • забавно

    (для программистов, остальных прошу извинить) Если бы меня спросили, до того, как я это сам прочитал: ($=_=>`($=${$})()`)() 1. На каком языке…

  • прогнулись

    Смешно, но не очень :-(

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 34 comments

  • я не могу иначе

    Просто потому, что мне очень нравится эта песня и это исполнение. Немного подсел на это видео в последние дни.

  • забавно

    (для программистов, остальных прошу извинить) Если бы меня спросили, до того, как я это сам прочитал: ($=_=>`($=${$})()`)() 1. На каком языке…

  • прогнулись

    Смешно, но не очень :-(