c++ - 为什么只有当它有模板推导时我才能将左值绑定(bind)到通用引用?

标签 c++

我正在阅读 Scott Meyers - Effective Modern C++,尽管我了解何时我可以和不能将左值引用绑定(bind)到通用引用,但我无法理解>原因这背后。

#include <iostream>
#include <string>

class A{
public:
    A(std::string && s){}
};

class B{
public:
    template<typename T>
    B(T&& t){}
};

int main()
{
    std::string t;
    //A a(t); //won't compile
    B b(t); //compiles

    return 0;
}

我在传递 t 时没有看到任何未定义的行为,它是对 A() 的左值引用,因此它被绑定(bind)为 std::string &。为什么仅仅通过类型推导就可以实现?

最佳答案

因为它不是转发(通用)引用。它是一个右值 引用,右值引用不能绑定(bind)到左值。

关于c++ - 为什么只有当它有模板推导时我才能将左值绑定(bind)到通用引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57670613/

相关文章:

c++ - 在 MFC 回调函数/事件处理程序中捕获异常

c++ - OpenMP:为 'shared' 预先确定 'shared' ?

c++ - 如何捕获最多N次的重复组?

c++ - 在构造函数中从另一个类成员构造一个类成员

c++ - 检查ifstream,出错后不起作用?

c++ - C++中如何检测字符串是否被LZW算法压缩

c++ - C 字符串集

c++ - 如何以编程方式单击 QPushButton

c++ - 如何在运算符重载中解释 "operator const char*()"?

c++ - QGraphicsWidget 的上下文菜单事件