5

右辺値と一時オブジェクトの違いを理解するのにかなりの時間がかかりました。しかし、現在、最終委員会の草案は75ページに次のように述べています。

右辺値[...]、xvalue、一時オブジェクトまたはそのサブオブジェクト、またはオブジェクトに関連付けられていない値です。

目を信じられない。これはエラーに違いありませんよね?


明確にするために、これが私が用語を理解する方法です:

#include <string>

void foo(std::string&& str)
{
    std::cout << str << std::endl;
}

int main()
{
    foo(std::string("hello"));
}

このプログラムには、同じ一時オブジェクトを表す2つのがあります。prvalueとlvalueです。式はオブジェクトではありませんが、それらの評価によってオブジェクトが生成される場合があります。具体的には、prvalueを評価すると一時オブジェクトが生成されますが、prvalueは一時オブジェクトではありません。誰かが私に同意しますか、それとも私が狂っていますか?:)std::string("hello")str

4

2 に答える 2

2

はい、あなたに賛成です。これは私の意見では修正されるべきであり、私が深く敬意を払っている何人かの人々はこれについてまったく同じ質問を提起しました。

于 2010-06-11T20:02:20.743 に答える
0

これは思ったほど複雑ではありません。現在完成している標準ISO/IEC14882-2011を参照しています。ページ78は言う:

xvalue(「eXpiring」値)も、通常はその存続期間の終わり近くにあるオブジェクトを参照します(たとえば、そのリソースを移動できるようにするため)。xvalueは、右辺値参照(8.3.2)を含む特定の種類の式の結果です。

上記の太字は私が追加したものです。規格はさらに次のように述べています。

右辺値(歴史的には、右辺値は代入式の右側に表示される可能性があるため)は、x値、一時オブジェクト(12.2)またはそのサブオブジェクト、またはオブジェクトに関連付けられていない値です。

したがって、「右辺値参照を含む特定の種類の式」で遊んでいる場合にのみ、xvalueを取得します。それ以外の場合、一時オブジェクトはそれだけです-一時オブジェクト。

于 2012-06-28T02:35:28.610 に答える