は、以下のクラスを考慮してください
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;
}
};
発現some_foo.copy_of_name()
copy_of_name
オブジェクト(std::string
)、ない参照を返すため、prvalueあります。すべての価値観はまた価値でもあります。 original_name
が左辺値参照(std::string&
)を返すため(右辺値より一般的である。)
発現some_foo.original_name()
は、左辺値あります。すべての左辺値もglvalueです。 std::move
が右辺値参照(std::string&&
)を返すため(Glvaluesより一般的である。)
発現std::move(some_name)
は、はxValueあります。すべてのxvalueは、glvalueとrvalueの両方です。
注オブジェクトと参照用の名前は常に左辺値されていること:上記の宣言を考える
std::string a;
std::string& b;
std::string&& c;
を、表現a
、b
とc
は左辺値です。
「実生活の例」?あなたは、スーパーマーケットでxvalueを見つけたり、あなたの車がlvalueとして分類できるかどうか疑問に思うようなことを意味しますか? – jalf
hehe、実用的な例を意味していた –