C++ C++;11右值引用和变量初始化 让我们考虑下面的代码: std::string&& rvalue_reference_1 = std::string("some string"); std::string regular_string("some string"); std::string&& rvalue_reference_2 = "some string";

C++ C++;11右值引用和变量初始化 让我们考虑下面的代码: std::string&& rvalue_reference_1 = std::string("some string"); std::string regular_string("some string"); std::string&& rvalue_reference_2 = "some string";,c++,string,c++11,reference,rvalue,C++,String,C++11,Reference,Rvalue,第一个和第二个语句的行为方式相同吗?我把第一个理解为构造一个临时对象,然后简单地“指定一个名称”给它。因此,它成为一个规则对象。我哪里错了 在第三句话中,我不太明白引擎盖下发生了什么。“some string”是一个匿名/临时的const char*,rvalue\u reference\u 2是对std::string对象的rvalue引用,而不是对const char*对象的rvalue引用。。。通过编写std::string&&,我们是否隐式调用std::string的构造函数 你自己回答

第一个和第二个语句的行为方式相同吗?我把第一个理解为构造一个临时对象,然后简单地“指定一个名称”给它。因此,它成为一个规则对象。我哪里错了

  • 在第三句话中,我不太明白引擎盖下发生了什么。“some string”是一个匿名/临时的
    const char*
    ,rvalue\u reference\u 2是对
    std::string
    对象的rvalue引用,而不是对
    const char*
    对象的rvalue引用。。。通过编写
    std::string&&
    ,我们是否隐式调用
    std::string
    的构造函数


  • 你自己回答了这个问题。我不确定非常量值引用是否会延长临时对象的生存期……如果它们不会,那么两行都是1。三,。这些都是坏事™.@对于第一个问题,我不确定自己的答案,但很好。但是对于我的第二个,我还是有点困惑……如果可能的话,C++总是试图自动转换类型。在您的例子中,它在左侧找到一个
    std::string&
    ,在右侧找到一个
    const char*
    。因此,编译器将查找
    string
    的构造函数,该构造函数采用
    const char*
    参数。由于有这样一个构造函数可用,它调用构造函数。此外,以这种方式构造一个
    字符串
    会自动给出一个右值,因此,可以将其分配给左侧的右值引用。@paramagnetic croissant the[]表示可以绑定到c++11中的右值引用