我正在查看我的迭代器类的反汇编,如下所示,它是用最大的编译器优化编译的。
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 的复制构造函数,但我一生都无法弄清楚为什么编译器无法优化它。