为什么不使用标准随机访问迭代器为size_t实现算术?

时间:2016-06-29 13:59:24

标签: c++ language-lawyer

这几乎是this question的后续行动。主要问题是这个例子

std::vector<int> v;
const size_t offset = 0;
v.insert(v.begin() + offset, 0);

发出警告(用-Wsign-conversion编译时):

warning: implicit conversion changes signedness: 'const size_t' (aka 'const unsigned long') to 'const difference_type' (aka 'const long') [-Wsign-conversion]

我完全理解difference_type必须有算术,但是我不理解的内容以及链接问题中没有回答的内容是为什么没有额外的operator+ size_t

我摆脱这些警告的相当狡猾的解决方案是自己实施:

template<class IteratorType, 
    typename std::enable_if<
        std::is_same<typename std::iterator_traits<IteratorType>::difference_type, long>::value
        && std::is_class<IteratorType>::value
    , bool>::type = true>
IteratorType operator+(const IteratorType& _iterator, const size_t _add) {
    return _iterator + typename std::iterator_traits<IteratorType>::difference_type(_add);
}

到目前为止我还没有遇到任何麻烦。因此,我想知道标准为何不提供此运算符的合理性。

0 个答案:

没有答案