右辺値と一時オブジェクトの違いを理解するのにかなりの時間がかかりました。しかし、現在、最終委員会の草案は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