请问侯捷书《STL源码剖析》一书,P102页的一个问题!

DelphiBoy2003 2006-07-19 11:11:22
书中讲到这个函数,我没有理解,希望看过这本书的兄弟能帮忙解释一下,书中原文如下:
//这个函数可以很方便地决定某个迭代器地value_type
template<class Iterator>
inline typename iterator_traits<Iterator>::value_type*
value_type(const Iterator&)
{
return static_cast<typename iterator_traits<Iterator>::value_type*>(0);
}
这里为什么要用0作为强制转换的值?而且我自己写了一个测试代码测试了一下,无论是对象指针还是普通的int型指针,使用static_cast<int*>(0)和static_cast<Obj*>(0)的最后输出都是00000000,这样这个函数最后输出也是00000000,那么是如何辨别出迭代器的value_type的呢
...全文
218 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharpdew 2006-07-19
  • 打赏
  • 举报
回复
template<class Iterator>
inline typename iterator_traits<Iterator>::value_type*
value_type(const Iterator&)
{
return static_cast<typename iterator_traits<Iterator>::value_type*>(0);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这段代码就是返回一个iterator对应的数据类型的指针。
如vector<int>的话,返回的是一个int指针,int*,但指针得有个初始化值比较好,于是返回
一个NULL,也就是初始化为0得指针正好!
这个指针类型的确在编译得时候就推导出来了,至于到运行时返回一个此类型得NULL指针可能的确没有实际用途,只要用的还是其指针类型信息。
DelphiBoy2003 2006-07-19
  • 打赏
  • 举报
回复
能否举一个例子方便理解?
healer_kx 2006-07-19
  • 打赏
  • 举报
回复
这段代码的运行时不重要,重要的是萃取出了value_type,它在编译期间的时候就起作用了。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧