下面的代码是Ubuntu标准软件包中提供的类初始化程序列表。在此迭代器和const_iterator是相同类型的typedef。我只是想知道为什么我们要为不同类型的Iterator使用相同的typedef?理想情况下,Iterator应该具有typedef _E *迭代器。

// In the class initializer list:
namespace std
{
  /// initializer_list
  template<class _E>
    class initializer_list
    {
    public:
      typedef _E                value_type;
      typedef const _E&         reference;
      typedef const _E&         const_reference;
      typedef size_t            size_type;
      typedef const _E*         iterator;
      typedef const _E*         const_iterator;

附注:我想不出合适的标题,所以我给了这个标题

最佳答案

为了满足Container的要求,两种类型iteratorconst_iterator必须同时存在。许多算法和大量代码都依赖于具有这两种类型的容器。但是,没有理由iterator类型必须是非const(可变)迭代器。在这种情况下,他们决定iteratorconst_iterator均为const(不可变)迭代器。

它们将两个迭代器都作为const的原因是,因为它们显然不希望您能够更改initializer_list中的值。

再举一个例子,看看 std::set ,其iteratorconst_iterator类型也是常量迭代器。由于std::set包含有序元素,因此,如果您能够更改std::set的内容,则该排序将无效。为防止这种情况,两种迭代器类型均设为不可变的。

关于c++ - 同一类型的多个typedef,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14859582/

10-13 07:04