我想了解左值如何绑定(bind)到右值引用。考虑这段代码:
#include <iostream>
template<typename T>
void f(T&& x) {
std::cout << x;
}
void g(int&& x) {
std::cout << x;
}
int main() {
int x = 4;
f(x);
g(x);
return 0;
}
虽然调用 f() 没问题,但调用 g() 会出现编译时错误。这种绑定(bind)是否仅适用于模板?为什么?我们可以在没有模板的情况下以某种方式做到这一点吗?
最佳答案
由于 T
是一个模板参数,T&&
成为一个转发引用。由于引用折叠规则,对于左值,f(T& &&)
变为 f(T&)
而 f(T &&)
变为 f (T&&)
用于右值。
关于c++ - 左值绑定(bind)到右值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126485/