代码之家  ›  专栏  ›  技术社区  ›  Java

字符串::length返回假值?

  •  1
  • Java  · 技术社区  · 7 年前
    string str = "abcdef";
    cout << str.length() << endl; //6
    cout << str.length() - 7 << endl; //4294967295
    

    2 回复  |  直到 7 年前
        1
  •  8
  •   Cuber    7 年前

    str.length() 返回a size_t ,未签名。这是一个无符号的结果,这就是为什么得到4294967295而不是-1。

        2
  •  6
  •   gsamaras eudoxos    7 年前

    返回类型 str.length() size_t :

    length()const noexcept;

    你可以把它看作 unsigned int

    无符号整数在达到负值时下溢,卷绕并达到另一个极端,导致

    4294967295(2^32-1)对应于32位无符号类型的最大值-这与相当多的32位实现一致。此外 可以是,但是是 要求为32位类型。