Mar. 25th, 2021

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

How C++ Resolves a Function Call

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

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

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

February 2026

S M T W T F S
1 2 3 4 5 67
8 9 10111213 14
15 16 17 18192021
2223 24 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 27th, 2026 04:11 pm
Powered by Dreamwidth Studios