在基类上复制构造函数未被优化

时间:2012-12-08 12:29:13

标签: c++ optimization iterator

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

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的复制构造函数,但我不能在我的生活中找出为什么编译器无法优化它。

0 个答案:

没有答案