首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >boost序列化库如何检测数组?

boost序列化库如何检测数组?
EN

Stack Overflow用户
提问于 2015-03-06 13:00:04
回答 1查看 101关注 0票数 2

boost序列化库教程中,它说“序列化库检测被序列化的对象何时是数组”,因此类似于bus_stop * stops[10]; ar & stops;的代码等同于使用for循环for(i = 0; i < 10; ++i) { ar & stops[i]; }

库如何在运行时确定指针stops指向多少个元素?或者它实际上是一个数组而不是指向单个对象的指针?我还没有在源代码中找到任何提示。

谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2015-03-06 13:06:35

注意,stops不是指针,它是一个数组(由10个指向bus_stop的指针组成,但这是不相关的)。

数组不是指针。有一个从数组到指针到数组的第一个元素的隐式转换,当您将一个char数组传递给需要一个char *参数的函数时就会发生。但这种转换只有在需要时才会发生。

如果函数通过引用获取数组,则当然不会发生转换(也称为数组到指针衰减),因此参数可以绑定到参数。换句话说,它所需要的只是一个合适的函数模板:

代码语言:javascript
运行
复制
template <class T, std::size_t N>
void operator & (some_type lhs, T (&array)[N]);

这将只接受数组作为右侧参数。

注意,如果在您的原始代码中,您这样做了:

代码语言:javascript
运行
复制
bus_stop * stops[10];
bus_stop ** p_stops = stops; // decay happens here

ar & p_stops;

然后最后一行将不会调用数组重载。stops的类型是一个数组。p_stops的类型是指针。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28899310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档