
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдмрд╣рд╛рджреБрд░ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рд┐рд░ рдХреЗ рдмрд▓ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ? рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХреА рдХреБрдЫ рд╕рд░рд▓ рд░реЗрдЦрд╛рдПрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИрдВ?
рдЕрдЧрд░ рдЖрдкрдХрд╛ рдЬрд╡рд╛рдм "рд╣рд╛рдБ!" - рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдЖрдкрдХреЛ C рдпрд╛ C ++ рдореЗрдВ рдХрдИ рдордиреЛрд░рдВрдЬрдХ рдХрд╛рд░реНрдп рдорд┐рд▓реЗрдВрдЧреЗред
рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рд╣реА рдЙрддреНрддрд░ рд╣рдореЗрд╢рд╛ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдиреАрдЪреЗ рдЫрд┐рдкрд╛ рд╣реЛрдЧрд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╣реИ
рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
main;
рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ C рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
- рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВред
- рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
- рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЬреБрдбрд╝рд╛ рд╣реБрдЖред
рдЙрддреНрддрд░ рд╣реИ:рдпрд╣ рдорд╛рдиреНрдп рд╕реА рдХреЛрдб рд╣реИред
рдХреНрдпреЛрдВ? рд╕реА рдореЗрдВ, рдЖрдк рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрдВрдЯ рд╣реЛрдЧрд╛ред рдФрд░ рд╕реА рдореЗрдВ рднреА рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рд┐рдВрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рдХреЗ рддрд╣рдд рдореБрдЦреНрдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рдХрд╛рдВрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
#include <iostream> #include <unistd.h> int main() { for(auto i = 0; i < 1000; i++) std::cout << "Hello world!\n"; fork(); }
рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдХрд┐рддрдиреА рдмрд╛рд░ рд╣реЛрдЧрд╛!
- 1000
- рдХрдо
- рдмрдбрд╝рд╛
рдЙрддреНрддрд░ рд╣реИ:рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IO рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрдлрд╝рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлреЛрд░реНрдХрд┐рдВрдЧ fork()
рдХреЙрд▓рд┐рдВрдЧ рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрдкреА-рдСрди-рд░рд╛рдЗрдЯ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд░реЗрдЧреАред
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрдлрд╝рд░реНрдб рд▓рд╛рдЗрдиреЗрдВ рдореБрджреНрд░рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреАред
рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
#include <iostream> int main() { int array[] = { 1, 2, 3 }; std::cout << (4, (1, 2)[array]) << std::endl; }
рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдЫрдкреЗрдЧрд╛?
- 1
- 2
- 3
- 4
- рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐
- рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВред
рдЙрддреНрддрд░ рд╣реИ:рдкреЛрд░рдЧреНрд░рд╛рдо рдкреНрд░рд┐рдВрдЯ рейред
рдРрд╕рд╛ рдХреНрдпреЛрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рджреЗрдЦреЗрдВ: array[index] == *(array + index) == *(index + array) == index[array]
рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдмрд╛рдЗрдирд░реА рдХреЙрдорд╛ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЕрдкрдиреЗ рдмрд╛рдПрдВ рддрд░реНрдХ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рд░реЗрдЧреЗрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
#include <regex> #include <iostream> int main() { std::regex re { "(.*|.*)*O" }; std::string str { "0123456789" }; std::cout << std::regex_match(str, re); return 0; }
рдЗрд╕ рдирд┐рдпрдорд┐рдд рд╕реАрдЬрди рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рдордп рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
- ~ 1 рдорд┐ред
- ~ 100 рдорд┐ред
- ~ 1 рд╕реЗрдХрдВрдбред
- ~ 1 рдорд┐
- ~ 1 рдШрдВрдЯрд╛
- ~ 1 рд╡рд░реНрд╖ред
- рдЕрдм рдмреНрд░рд╣реНрдорд╛рдВрдб рдЬреАрд╡рди
рдЙрддреНрддрд░ рд╣реИ:рд╣рд╛-рд╣рд╛! рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд╣реИред рд╕рдВрдХрд▓рдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░, рдХреНрд▓реИрдВрдЧ рд▓рдЧрднрдЧ 100 рдПрдордПрд╕ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдЬреАрд╕реАрд╕реА 57 рд╕реЗрдХрдВрдб! рдПрдХ рдорд┐рдирдЯ! рд╕рдЪ рдореЗрдВ!
рдРрд╕рд╛ рдХреНрдпреЛрдВ?
рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред
рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ O(n**2)
рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ, рд▓рдВрдмрд╛рдИ рдПрди рдЕрдХреНрд╖рд░ рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдПред
рдореАрдЯрд░ рд╡рд░реНрдгреЛрдВ рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рди рдХреА рдХрдард┐рдирд╛рдИ O(m)
ред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмреИрдХрдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рджреВрд╕рд░реА рдЧрд╣рд░рд╛рдИ рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рд▓рдЪреА рдЦреЛрдЬ рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИред рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдлрд┐рд░ рднреА, рдПрд╕рдЯреАрдПрд▓ рдореЗрдВ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ред
рдЪрд╛рд▓ рдФрд░ рдореЗрдордиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
#include <iostream> struct Foo { Foo() { std::cout << "Foo()\n"; } Foo(Foo&&) { std::cout << "Foo(Foo&&)\n"; } Foo(const Foo&) { std::cout << "Foo(const Foo&)\n"; } }; int main() { Foo f; auto a = [f = std::move(f)]() { return std::move(f); }; Foo f2(a()); return 0; }
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕ рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ?
Foo()
Foo(Foo&&)
Foo(const Foo&)
рдЙрддреНрддрд░ рд╣реИ:Foo(const Foo&)
ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд▓реИрдореНрдмреНрдбрд╛ рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рд╣реИрдВред []
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП const
рдЬреЛрдбрд╝рд╛ const
ред
рдпрд╣ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдорд╛рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рди рдорд╛рди рд▓реМрдЯрд╛рдПрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдЬрдм рд╣рдо рдХрд┐рд╕реА рдлрдВрдХреНрд╢рди рд╕реЗ рдореВрд╡ f
рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо const Foo&&
рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, рд╕рдВрдХрд▓рдХ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ Foo
рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЖрдк рдЗрд╕реЗ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд▓рдВрдмреЛрджрд░ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
auto a = [f = std::move(f)]() mutable { return std::move(f); };
рдпрд╛ Foo(const Foo&&)
рд╕реЗ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмрдирд╛рдПрдВред
рдПрдХреНрд╕ рдФрд░ рдмрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
#include <iostream> int x = 0; int bar(int(x)); int main() { std::cout << bar; }
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
0
рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛1
рдЫрдкреЗрдЧрд╛0x0
рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛- рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ
- рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛
рдЙрддреНрддрд░ рд╣реИ:рдХрд╛рд░реНрдпрдХреНрд░рдо 1
рдкреНрд░рд┐рдВрдЯ рд╣реЛрдЧрд╛ред
рдРрд╕рд╛ рдХреНрдпреЛрдВ?
int bar(int(x));
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рд╣реИ, рдпрд╣ int bar(int x);
рдмрд░рд╛рдмрд░ рд╣реИ int bar(int x);
ред
рдпрджрд┐ рдЖрдк рдПрдХ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ int bar((int(x)));
рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ int bar((int(x)));
ред
рдлрд┐рд░ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреВрд▓ рдХреЛ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреА, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред true
ред
bar()
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдХреЛрдИ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдкреНрд░рддреАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрдирд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
#include <iostream> inline size_t factorial(size_t n) { if (n == 0) return 1; return n * factorial(n - 1); } int main() { std::cout << factorial(5) << std::endl; }
рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕ g++ -c main.cpp -o main.o && g++ foo.cpp -o foo.o && g++ foo.o main.o -o test
рддрд░рд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рди рдФрд░ рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
- 120 рдЫрдкреЗрдЧрд╛ред
- рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрддреНрддрд░ рд╣реИ:рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ C ++ рд╣реИред
рдЗрдирд▓рд╛рдЗрди рд╢рдмреНрдж рдореЗрдВ рд╕рднреА рдХреИрдЪред рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рд╣реИред
рдпрд╣ рдмрд╕ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░реЗрдЧрд╛)ред
рд▓рд┐рдВрдХрд░ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рд╡рд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкрд╣рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд┐рд▓реА рдереАред
рдЕрдЧрд░ foo.cpp рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо 0
рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛:
#include <cstddef> inline size_t factorial(size_t n) { if (n == 0) return 0; return 2 * n * factorial(n - 1); } int foo(size_t n) { return factorial(n); }
рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
#include <iostream> struct Foo { Foo() { std::cout << "Foo()\n"; } Foo(const Foo&) { std::cout << "Foo(const Foo&)\n"; } Foo(int) { std::cout << "Foo(int)\n"; } Foo(int, int) { std::cout << "Foo(int, int)\n"; } Foo(const Foo&, int) { std::cout << "Foo(const Foo&, int)\n"; } Foo(int, const Foo&) { std::cout << "Foo(int, const Foo&)\n"; } }; void f(Foo) {} struct Bar { int i, j; Bar() { f(Foo(i, j)); f(Foo(i)); Foo(i, j); Foo(i); Foo(i, j); } }; int main() { Bar(); }
рдХреМрди рд╕реА рд▓рд╛рдЗрди рдЕрдВрддрд┐рдо рдЫрдкреЗрдЧреА?
Foo(int, int)
Foo(const Foo&, int)
Foo(int, const Foo&)
Foo(int)
рдЙрддреНрддрд░ рд╣реИ:рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ Foo(const Foo&, int)
ред
Foo(i)
рдПрдХ рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рд╣реИ, рдпрд╣ Foo i
рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ i
рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдХрднреА рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗред