右值引用的对象内部的对象也是右值引用的吗?
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
是的,右值的成员本身就是右值。对此进行了澄清DR 421
但这在这里无关紧要:
自动 &&in4 = b.a2;
b
不是右值,它是左值(简单的经验法则:它有一个名称)。
要恢复传递给函数时的值类别,您需要forward
it
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)