【发布时间】:2016-01-01 07:50:57
【问题描述】:
我对以下完美的转发功能感到困惑,其中模板参数T可以匹配右值或左值引用:
template<typename T>
void foo(T&& t){
T::A; // intended error to inspect type
}
int main(){
std::vector<int> a;
std::vector<int> && b = std::move(a);
foo(b); // T is std::vector<int> &
foo(std::move(a)); // T is std::vector<int>
}
我不明白为什么这两种情况下foo中T的模板参数推导如此不同? t在函数foo中的类型是什么,最重要的区别是什么。
std::move(a) 返回一个右值引用,而b 已经是一个右值引用(但有一个名称)。
对吗,b 的类型是对std::vector<int> 的右值引用,但据我了解,它有一个名称,因此在函数 main 中被视为左值?
任何人都可以对此有所了解吗:-)
【问题讨论】:
-
所有答案都很好,我只是感到困惑,但这是有道理的:-)
标签: c++ c++11 rvalue-reference