“&”号在这里做什么?

时间:2019-08-08 04:13:52

标签: c++ pointers boost reference

我试图理解这段代码,遇到了一些我无法解释的内容:

template<unsigned ELEMENT_DIM, class SIM, unsigned SPACE_DIM>
void CellBasedSimulationArchiver<ELEMENT_DIM, SIM, SPACE_DIM>::Save(SIM* pSim)
{
    // Do a bunch of stuff

    boost::archive::text_oarchive* p_arch = arch_opener.GetCommonArchive();

    // Archive the simulation (const-ness would be a pain here)
    (*p_arch) & pSim;  //<--------------- What is this?
}

此功能的目的是使用boost来存档模拟状态,因此可以在以后重新加载并继续。我正在尝试了解归档实际上是如何发生的,但是带有箭头的线使我感到困惑。在某些时候,必须进行实际的节省,而我猜箭头就是发生的地方。

某些事情必须继续进行,但是这行到底是什么意思,&在这里做什么?是某种参考吗?我查看了some documentation,它包含<<运算符,但没有&

1 个答案:

答案 0 :(得分:2)

此处的&符号是二进制&运算符。对于整数类型,这将是按位AND运算符(就像<<将是左移运算符),但是boost::archive::text_oarchive不是整数类型。必须为此类定义了运算符重载函数。因此,该运算符将调用该函数。

根据docs

sa << x
sa & x
     

这些表达式必须执行完全相同的功能。他们将x的值以及其他信息附加到sa。其他信息由归档的实现定义。通常,此信息是相应的Loading Archive类型正确恢复x值所需的信息。

因此,(*p_arch) & pSim;pSim附加到p_arch指向的档案中。

相关问题