代码之家  ›  专栏  ›  技术社区  ›  Trevor Hickey

如果npos为-1,那么size_type如何成为无符号整数?

  •  0
  • Trevor Hickey  · 技术社区  · 10 年前

    如果 std::size_type 第页,共页 std::string 是默认分配器的值,

    21.3.1类模板basic_string
    typedef typename allocator_traits<Allocator>::size_type size_type;

    以及 标准::size_type 默认分配器为 std::size_t ,

    20.9.9默认分配器
    typedef size_t size_type;

    我们知道 标准::size_t 始终是无符号整数类型,

    C++标准
    5.3.3尺寸
    sizeof和sizeof…的结果是类型为的常量 标准::size_t .
    [注意:标准头中定义了std::size_t <cstddef>

    8.2类型
    内容与标准C库标题相同 <stddef.h> ,具有以下更改:


    C标准
    6.5.3.4 sizeof和_Alignof运算符
    两个运算符的结果值都是由实现定义的,
    其类型(无符号整数类型)为 size_t ,定义于 <标准定义h> (和其他标题)。

    如何才能 std::basic_string::npos (定义为 size_type )是-1?

    2 回复  |  直到 10 年前
        1
  •  4
  •   templatetypedef    10 年前

    C++规范要求有符号类型可以转换为无符号类型。§4.7/2规定

    如果目标类型是无符号的,则结果值是与源类型一致的最小无符号整数 整数(模2 n 其中n是用于表示无符号类型的位数)

    这意味着C++规范保证-1可以转换为 size_type 即使 尺寸_类型 是无符号的,结果将等于最大可能值 尺寸_类型 因为将1加到那个数字上需要返回0。

        2
  •  2
  •   juanchopanza    10 年前

    该定义使用无符号整数遵循模运算这一事实,并且 -1 转换为给定类型的最大无符号整数。

    推荐文章