为什么直接传递 'this' 指针存档出错,而另一个相同类型的指针就可以了?

Why is passing 'this' pointer directly to archive an error, but another pointer of same type is ok?

传递分配给另一个指针的 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;
    }
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;
    }

[error] 我真的不明白这一点。我在两个代码示例中都传递了相同的指针,对吗?为什么会出错?

唯一的区别是 this 是纯右值,将它赋给 dest 会使它成为左值。

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

template<class T>
boost::archive::text_iarchive& operator>>(
    boost::archive::text_iarchive& ia,
    T& archive_to
);

并且像 this 这样的右值不能绑定到非常量左值引用,因为它试图将指针设置为反序列化值(可能不是你想要的)。