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.