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 を初期化しないままにするデフォルト コンストラクタを記述できます。
私の質問 (2 つの部分):
(a) C++ 標準は、デフォルトで構築された反復子にどのような要件を課していますか?
(b) をインスタンス化するときに除外すると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」タグは使用しませんでした。)