小编No *_*One的帖子

类,Rvalues和Rvalue引用

左值是绑定到存储器的确定区域的值,而右值是表达式值,其存在是临时的,并且不一定是指存储器的确定区域.只要在预期rvalue的位置使用左值,编译器就会执行左值到右值的转换,然后继续进行求值.

http://www.eetimes.com/discussion/programming-pointers/4023341/Lvalues-and-Rvalues

每当我们构造一个临时(匿名)类对象或从函数返回一个临时类对象时,虽然该对象是临时的,但它是可寻址的.但是,对象仍然是有效的右值.这意味着当编译器期望使用左值时,对象是a)可寻址的右值或b)从左值隐式转换为右值.

例如:

class A
{
public:
    int x;
    A(int a) { x = a; std::cout << "int conversion ctor\n"; }
    A(A&) { std::cout << "lvalue copy ctor\n"; }
    A(A&&) { std::cout << "rvalue copy ctor\n"; }
};
A ret_a(A a) 
{
    return a;
}

int main(void)
{
    &A(5); // A(5) is an addressable object
    A&& rvalue = A(5); // A(5) is also an rvalue
}
Run Code Online (Sandbox Code Playgroud)

我们还知道函数返回的临时对象(在下面的例子中a)是lvalues作为这个代码段:

int main(void)
{
    ret_a(A(5));
}
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

int conversion …

c++ reference rvalue lvalue rvalue-reference

13
推荐指数
1
解决办法
2080
查看次数

标签 统计

c++ ×1

lvalue ×1

reference ×1

rvalue ×1

rvalue-reference ×1