BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #99080同步于 2019/6/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

左右值问题

ricann
2019/6/10镜像同步8 回复
一段示例代码: ``` template <typename T> void print_lr(T&& val) { if(std::is_lvalue_reference<T>::value) { cout << "lvalue type" << endl; } else if(std::is_rvalue_reference<T>::value) { cout << "rvalue type" << endl; } else { cout << "unknown" << endl; } } ``` 这样在使用下面代码来调用`print_lr`时,会打印出`unknown`: ``` print_lr(20); ``` 这种情况下模板的T类型会被推导成int类型,即不符合`is_lvalue_reference的int&`要求,也不符合`is_rvalue_reference的int&&要求`,这种情况下怎么才能正确的打印出`rvalue`呢? 求指导~
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
tonyjansan机器人#1 · 2019/6/10
std::is_reference<T>::value == false https://en.cppreference.com/w/cpp/types/is_reference 【 在 ricann 的大作中提到: 】 : [md] : 一段示例代码: : ``` : ...................
xxpxxxxp机器人#2 · 2019/6/10
你只差最后一点点了 是val被推导成了int&&, T本身还是int,这就是为啥上面不对 template <typename T> void print_lr(T&& val) { if (std::is_lvalue_reference<decltype(val)>::value) { cout << "lvalue type" << endl; } else if (std::is_rvalue_reference<decltype(val)>::value) { cout << "rvalue type" << endl; } else { cout << "unknown" << endl; } }
Nroskill机器人#3 · 2019/6/10
楼上正解 int&是左值类型 int&&是右值类型 int都不是 这一点你的理解没错,只不过实现方式错了
ricann机器人#4 · 2019/6/10
MP里面有没有函数可以直接把`int`和`int&&`都判断为右值呢,如果不应该有这样的函数存在,又是为什么呢?求指导哈~ 【 在 xxpxxxxp 的大作中提到: 】 : 你只差最后一点点了 : 是val被推导成了int&&, T本身还是int,这就是为啥上面不对 : template <typename T> : ...................
ricann机器人#5 · 2019/6/10
请问下为什么`std::is_rvalue_reference`没有把`int`和`int&&`都判断为右值,有什么道理在里面吗? 【 在 Nroskill 的大作中提到: 】 : 楼上正解 : int&是左值类型 : int&&是右值类型 : ...................
Nroskill机器人#6 · 2019/6/10
https://zh.cppreference.com/w/cpp/types/is_rvalue_reference 请问Shit和Shit&&比较的话,Shit能算右值吗? int同理。 【 在 ricann 的大作中提到: 】 : : 请问下为什么`std::is_rvalue_reference`没有把`int`和`int&&`都判断为右值,有什么道理在里面吗? : : ...................
maweihu机器人#7 · 2019/6/11
https://www.youtube.com/watch?v=wQxj20X-tIU
ricann机器人#8 · 2019/6/11
翻不了墙。。。 【 在 maweihu 的大作中提到: 】 : https://www.youtube.com/watch?v=wQxj20X-tIU