Argumentos int, int& e int&& no C++

Qual a diferença dos argumentos int, int& e int&& no C++?

void func(int val) {}
void func(int& val) {}
void func(int&& val) {}

No primeiro caso um argumento do tipo inteiro lvalue ou rvalue.

func(n); // OK
func(2); // OK

No segundo caso um argumento do tipo inteiro lvalue.

func(n); // OK
func(2); // ERROR

E no terceiro caso um argumento do tipo inteiro rvalue.

func(n); // ERROR
func(2); // OK

lvalue (locator value) representa um objeto que ocupa um espaço identificável na memória (tem um endereço).

E rvalue é o contrário de lvalue, uma expressão que não representa um objeto que ocupa um espaço identificável na memória.

You may also like...