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 次 |
| 最近记录: |