c++ - 左值绑定(bind)到右值引用

标签 c++ c++11 lvalue rvalue

我想了解左值如何绑定(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/

相关文章:

c++ - boost::asio + std::future - 关闭套接字后访问冲突

c++ - 用作左值的成员函数

c++ - 在 C++ 的任何修订版中,是否明确定义了 union 的任何使用?

c++ - 将 OGRE::Image 转换为 cv::Mat

c++ - 如何填充 Vec3b 数组

c++ - initializer_list 和 move 语义

c++ - 读取文件时如何忽略无效输入?

c++ - 静态断言失败 : variant must have no reference alternative

c++ - double 乘法 C++

c++ - 使用整数指针将左值转换为右值