假设我有一个函数的两个重载f.f(T&&)和f(T&).然后在身体g: g(T&& t) { f(t);}过载f(T&)将调用因为t被认为是左值.
f
f(T&&)
f(T&)
g
g(T&& t) { f(t);}
这对我来说非常令人惊讶.带签名的函数如何f(T&&)与类型的调用不匹配T&&?让我更加惊讶的是,一个电话f(static_cast<T&&>(t))实际上会调用rvalue超载f(T&&).
T&&
f(static_cast<T&&>(t))
使这成为可能的C++规则是什么?是T&&不是类型吗?
c++ rvalue rvalue-reference
c++ ×1
rvalue ×1
rvalue-reference ×1