Are objects inside rvalue referenced object, also rvalue referenced?

丶灬走出姿态 提交于 2019-11-30 17:15:38

问题


Are objects inside rvalue referenced object, also rvalue referenced?

struct A{
};

struct B{
   A a2;
};

//template<class B>
void test(B &&b){

    // 1. Is this the correct way?
    auto &&in3 = std::forward<B>(b).a2;
    std::cout << std::is_rvalue_reference<decltype(in3)>::value;
    // return true

    // 2. or this?
    auto &&in4 = b.a2;
    std::cout << std::is_rvalue_reference<decltype(in4)>::value;    
    // return false        
}

test(B());

http://coliru.stacked-crooked.com/a/bcf0f7dc4cc0440e


回答1:


Yes, members of rvalues are themselves rvalues. This was clarified by DR 421

But that is irrelevant here:

auto &&in4 = b.a2;

b is not an rvalue, it's an lvalue (simple rule of thumb: it has a name).

To restore the value category it had when passed to the function you need to forward it



来源:https://stackoverflow.com/questions/24380677/are-objects-inside-rvalue-referenced-object-also-rvalue-referenced

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!