为什么直接传递 '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
这样的右值不能绑定到非常量左值引用,因为它试图将指针设置为反序列化值(可能不是你想要的)。
传递分配给另一个指针的 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
这样的右值不能绑定到非常量左值引用,因为它试图将指针设置为反序列化值(可能不是你想要的)。