C++ 符号在这里做什么?

C++ 符号在这里做什么?,c++,pointers,boost,reference,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

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

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?
}
模板
void CellBasedSimulationArchiver::Save(SIM*pSim)
{
//做一堆事情
boost::archive::text\u oarchive*p\u arch=arch\u opener.GetCommonArchive();
//将模拟存档(在这里,const ness将是一个难题)

(*p_arch)&pSim;//符号,这是二进制
运算符。对于整数类型,这将是位AND运算符(就像
你提供的链接确实包含这一点,即
ar&a.legs
。它在代码示例上方也有文本。直觉告诉我它调用存储在
p\u arch
的对象,但对我来说它看起来有点奇怪,所以我不是100%确定。特别是因为在这里调用
操作符&
通常在一个页面上没有任何意义。)普通对象。但是boost可能会做一些不同的事情。boost序列化库是滥用运算符重载导致痛苦的一个很好的例子。@chris好的,我找到了你所说的部分,但我仍然不是wiser@Phill,我对库不太熟悉,但对operator&没有必要区分序列化并在serialize()中恢复.顺便说一句,这听起来主要是为了方便。我还建议您浏览一下。您链接到的是一本关于Boost的书。感谢您的回答,这实际上消除了我对该软件包中与存档相关的功能的一大堆误解…现在我要休息一下,思考一下为什么会有人这样做这
sa << x
sa & x