【发布时间】:2011-11-11 01:34:27
【问题描述】:
来自 boost::iterator_facade 文档中的示例 [1]:
class node_iterator : public boost::iterator_facade< /* ... */ >
{
public: node_iterator() : m_node(0) { }
/* ... */
private: node_base* m_node;
};
后跟脚注:
从技术上讲,C++ 标准对默认构造的迭代器几乎没有任何要求,因此如果我们真的关心效率,我们可以编写默认构造函数以使 m_node 未初始化。
我的问题(两部分):
(a) C++ 标准对默认构造的迭代器有什么要求?
(b) 为什么在实例化node_iterator 时省略m_node(0) 避免初始化m_node?无论如何,m_node 不会被默认初始化(因此是零初始化)吗?
[1]http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/iterator_facade.html#constructors-and-data-members (注:虽然这个问题源于一个 boost 示例,但我相信它适用于 STL 迭代器,因此我没有使用“boost”标签。)
【问题讨论】:
标签: c++ iterator default-constructor