在boost序列化库教程中,它说“序列化库检测被序列化的对象何时是数组”,因此类似于bus_stop * stops[10]; ar & stops;的代码等同于使用for循环for(i = 0; i < 10; ++i) { ar & stops[i]; }。
库如何在运行时确定指针stops指向多少个元素?或者它实际上是一个数组而不是指向单个对象的指针?我还没有在源代码中找到任何提示。
谢谢!
发布于 2015-03-06 13:06:35
注意,stops不是指针,它是一个数组(由10个指向bus_stop的指针组成,但这是不相关的)。
数组不是指针。有一个从数组到指针到数组的第一个元素的隐式转换,当您将一个char数组传递给需要一个char *参数的函数时就会发生。但这种转换只有在需要时才会发生。
如果函数通过引用获取数组,则当然不会发生转换(也称为数组到指针衰减),因此参数可以绑定到参数。换句话说,它所需要的只是一个合适的函数模板:
template <class T, std::size_t N>
void operator & (some_type lhs, T (&array)[N]);这将只接受数组作为右侧参数。
注意,如果在您的原始代码中,您这样做了:
bus_stop * stops[10];
bus_stop ** p_stops = stops; // decay happens here
ar & p_stops;然后最后一行将不会调用数组重载。stops的类型是一个数组。p_stops的类型是指针。
https://stackoverflow.com/questions/28899310
复制相似问题