为什么直接传递“ this”指针来存档错误,而另一个相同类型的指针却可以呢?

Ala*_*uża 0 c++ serialization boost boost-serialization

传递this分配给另一个指针的指针可以很好地工作,但是直接传递它本身本身却不行,如下所示:

table_row* table_row::deserialize_row(std::string src_serialized_row) {
        std::stringstream ss(src_serialized_row);
        boost::archive::text_iarchive ia(ss);
        table_row * dest = this;
        ia >> dest; // this is fine, compiles.
        return dest;
    }
Run Code Online (Sandbox Code Playgroud)
table_row* table_row::deserialize_row(std::string src_serialized_row) {
        std::stringstream ss(src_serialized_row);
        boost::archive::text_iarchive ia(ss);
        ia >> this; //error, >> operator does not match [error]
        return this;
    }
Run Code Online (Sandbox Code Playgroud)

[错误] 我不太了解。我在两个代码示例中都传递了相同的指针,对吗?为什么会出错?

Art*_*yer 5

唯一的区别是它this是一个prvalue,将其分配给dest它将成为一个lvalue。

我假设运算符看起来像这样:

template<class T>
boost::archive::text_iarchive& operator>>(
    boost::archive::text_iarchive& ia,
    T& archive_to
);
Run Code Online (Sandbox Code Playgroud)

像rvalue这样的值this不能绑定到非const lvalue引用,因为它试图将指针设置为反序列化的值(可能不是您想要的值)。

  • 其他一些读物可以帮助理解上述内容:[什么是右值,左值,x值,glavalue和prvalue?](/sf/ask/252112171/ -prvalues) (3认同)