来自 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) 为什么在实例化 a 时省略m_node(0)
避免初始化?那么无论如何都不会被默认初始化(因此为零初始化)? m_node
node_iterator
m_node
[1] http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/iterator_facade.html#constructors-and-data-members (注:虽然这个问题源于一个提升的例子,但我相信它适用于 STL 迭代器,因此我没有使用“boost”标签。)