下面的代码是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的要求,两种类型iterator
和const_iterator
必须同时存在。许多算法和大量代码都依赖于具有这两种类型的容器。但是,没有理由iterator
类型必须是非const
(可变)迭代器。在这种情况下,他们决定iterator
和const_iterator
均为const
(不可变)迭代器。
它们将两个迭代器都作为const
的原因是,因为它们显然不希望您能够更改initializer_list
中的值。
再举一个例子,看看 std::set
,其iterator
和const_iterator
类型也是常量迭代器。由于std::set
包含有序元素,因此,如果您能够更改std::set
的内容,则该排序将无效。为防止这种情况,两种迭代器类型均设为不可变的。
关于c++ - 同一类型的多个typedef,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14859582/