为什么C ++容器和迭代器要求将size_type和difference_type指定为整数类型?

时间:2018-12-04 12:16:30

标签: c++ types iterator containers language-lawyer

[container.requirements]指定对于容器类型 X X::difference_typeX::size_type是带符号的,而没有符号的整数。类型(由[basic.fundamental]/2定义)。迭代器的差异类型也是如此。

不允许将它们作为枚举类型或任何对象类型的原因是什么?

编辑:当然,以上类型应该满足一些必要的要求,例如,支持某些算术运算。我不希望将X::size_type定义为struct Empty {};并且没有任何运算符。

我的动机是我想将X::size_typeX::difference_type定义为用户定义的类型,其定义的运算符形成一个仿射空间,因此不同于为内置整数类型定义的运算符。 (仿射空格意味着我只定义对类型有意义并减少常见错误see an example here的操作。)

  

注意:关于签名与未签名的问题不是不是。我知道这一点:Is using an unsigned rather than signed int more likely to cause bugs? Why?

我能想到的一个可能的答案是用户可能希望将类型用作非类型模板参数,但仍然可以用于枚举类型。

编辑:另一个可能的答案可能是,我上面的编辑中的“必要要求”还没有完全定义,并且更容易使用标准中已有的内容。

0 个答案:

没有答案