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.