versiones dev compiler c++ c++11

dev - c++17



Ejemplos de vida real de xvalues, glvalues y prvalues? (1)

Me preguntaba si alguien podría contar o explicar algunos ejemplos de la vida real de xvalues, glvalues ​​y prvalues ​​?. He leído una pregunta similar:

¿Qué son los valores r, lvalues, xvalues, glvalues ​​y prvalues?

pero no entendí lo que todos querían decir. ¿Alguien puede explicar en qué casos estos valores son importantes y cuándo uno debería usarlos?


Considera la siguiente clase:

class Foo { std::string name; public: Foo(std::string some_name) : name(std::move(some_name)) { } std::string& original_name() { return name; } std::string copy_of_name() const { return name; } };

La expresión some_foo.copy_of_name() es un valor pr , porque copy_of_name devuelve un objeto ( std::string ), no una referencia. Cada prvalue también es un valor r. (Los valores R son más generales)

La expresión some_foo.original_name() es un lvalue , porque original_name devuelve una referencia lvalue ( std::string& ). Cada lvalue también es un glvalue. (Los valores de Gl son más generales).

La expresión std::move(some_name) es un valor x , porque std::move devuelve una referencia rvalue ( std::string&& ). Cada xvalue también es tanto un glvalue como un rvalue.

Tenga en cuenta que los nombres de los objetos y las referencias siempre son lvalues:

std::string a; std::string& b; std::string&& c;

Dadas las declaraciones anteriores, las expresiones a , c son lvalues.