返回信息流一段示例代码:
```
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`呢?
求指导~
这是一条镜像帖。来源:北邮人论坛 / cpp / #99080同步于 2019/6/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
左右值问题
ricann
2019/6/10镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
std::is_reference<T>::value == false
https://en.cppreference.com/w/cpp/types/is_reference
【 在 ricann 的大作中提到: 】
: [md]
: 一段示例代码:
: ```
: ...................
你只差最后一点点了
是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;
}
}
MP里面有没有函数可以直接把`int`和`int&&`都判断为右值呢,如果不应该有这样的函数存在,又是为什么呢?求指导哈~
【 在 xxpxxxxp 的大作中提到: 】
: 你只差最后一点点了
: 是val被推导成了int&&, T本身还是int,这就是为啥上面不对
: template <typename T>
: ...................
请问下为什么`std::is_rvalue_reference`没有把`int`和`int&&`都判断为右值,有什么道理在里面吗?
【 在 Nroskill 的大作中提到: 】
: 楼上正解
: int&是左值类型
: int&&是右值类型
: ...................
https://zh.cppreference.com/w/cpp/types/is_rvalue_reference
请问Shit和Shit&&比较的话,Shit能算右值吗?
int同理。
【 在 ricann 的大作中提到: 】
: : 请问下为什么`std::is_rvalue_reference`没有把`int`和`int&&`都判断为右值,有什么道理在里面吗?
:
: ...................