Let*_*_Be 11 c++ templates forwarding rvalue-reference c++11
任何人都可以解释为什么这个编译,为什么t
最终与类型int&
?
#include <utility>
void f(int& r)
{
++r;
}
template <typename Fun, typename T>
void g(Fun fun, T&& t)
{
fun(std::forward<T>(t));
}
int main()
{
int i = 0;
g(f, i);
}
Run Code Online (Sandbox Code Playgroud)
我在GCC 4.5.0 20100604和GDB 7.2-60.2上看到了这一点
Joh*_*itb 17
由于完美转发,当参数为P&&
左值时,P
则会推导出参数的类型加上&
附加值.所以你得到int & &&
了P
存在int&
.如果参数是一个右值,然后P
将被推断为仅参数的类型,所以你会得到一个int&&
论据与P
是int
,如果你会通过,例如0
直接.
int& &&
将崩溃到int&
(这是一个语义视图 - 语法上int& &&
是非法的.但是说U &&
何时U
是模板参数或typedef 引用类型int&
,然后U&&
仍然是类型int&
- 即两个引用"崩溃"到一个左值引用).这就是为什么t
有类型int&
.
归档时间: |
|
查看次数: |
453 次 |
最近记录: |