Skip to content

Latest commit

 

History

History
92 lines (67 loc) · 2.7 KB

File metadata and controls

92 lines (67 loc) · 2.7 KB

Sprawdźmy wiedzę 🙂

Dedukcja typów szablonowych


template <typename T>
void copy(T arg) {}

template <typename T>
void reference(T& arg) {}

template <typename T>
void universal_reference(T&& arg) {}

int main() {
    int number = 4;
    copy(number);       // int
    copy(5);            // int
    reference(number);  // int&
    reference(5);       // candidate function [with T = int] not viable: expects an l-value for 1st argument
    universal_reference(number);            // int&
    universal_reference(std::move(number)); // int&&
    universal_reference(5);                 // int&&
}

Sprawdźmy wiedzę 🤯

void foo(int && a);         // r
void foo(int & a);          // l

int a = 5;

Które z powyższych funkcji zostaną wywołane przez poniższe fragmenty kodu?

  • foo(4);
    • r
  • foo(a);
    • l
  • foo(std::move(a));
    • r
  • foo(std::move(4));
    • r (move is redundant)

Sprawdźmy wiedzę 🤯

template <typename T>
void foo(T && a);         // r

template <typename T>
void foo(T & a);          // l

int a = 5;

Które z powyższych funkcji zostaną wywołane przez poniższe fragmenty kodu?

  • foo(4);
    • r
  • foo(a);
    • l
  • foo(std::move(a));
    • r

Sprawdźmy wiedzę 🤯

template <typename T>
void foo(T && a);         // r

int a = 5;

Co się stanie teraz?

  • foo(4);
    • r
  • foo(a);
    • r
  • foo(std::move(a));
    • r