3

我正在查看我的迭代器类的反汇编,如下所示,它是用最大的编译器优化编译的。

class MY_ITR : public std::iterator< std::forward_iterator_tag, MY_TYPE* > {
public:
    MY_ITR();
    MY_ITR(const MY_TYPE2*, int);

    // standard iterator impl

private:
    static const int N = 3;
    int m_data[N];
};

我注意到一个看起来像复制构造函数的额外函数调用。果然,经过一番挖掘,我发现有人修改了 std::_Iterator_Base 类,使其包含空构造函数、复制构造函数和赋值运算符(?!?!)。在进行此编辑时(很久以前),它是为了规避代码检查工具中的警告。

namespace std {
struct _Iterator_Base {
    _Iterator_Base() {}
    _Iterator_Base(const _Iterator_Base& rhs) {}
    _Iterator_Base& operator =(const _Iterator_Base& rhs) { return *this; }
};

template <...>
struct iterator : _Iterator_Base {
    // typedefs
};

...

删除 _Iterator_Base 的实现会导致额外的函数调用消失。我知道 MY_ITR 的复制构造函数的默认实现需要调用 _Iterator_Base 的复制构造函数,但我一生都无法弄清楚为什么编译器无法优化它。

4

0 回答 0