【发布时间】:2018-04-19 03:24:42
【问题描述】:
据我所知,右值引用不能绑定到左值。 例如,
void func(Foo &&f) {}
int main() {
Foo f;
func(f);
}
编译器抱怨: 错误:无法将“Foo&&”类型的右值引用绑定到“Foo”类型的左值
但是,为什么右值引用类型的模板参数可以绑定到左值? 例如,
template <typename T> void funcTemp(T &&arg) {}
int main() {
Foo f;
funcTemp(f);
}
编译器不会报错。 为什么?
【问题讨论】:
-
因为它不是右值引用,而是forwarding reference,它适用于左值和右值。
-
查找引用折叠