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