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

大小值无效

c
  •  8
  • adk  · 技术社区  · 15 年前

    人们用什么来表示尺寸是无效的?-1不起作用,0可以是有效大小。

    5 回复  |  直到 8 年前
        1
  •  10
  •   Michael Krelin - hacker    15 年前

    也许 ((size_t)-1) ?

    严格来说, 一个有效的大小,但是一旦你有了这个,你就不可能再需要其他的了;-)

        2
  •  4
  •   Kieveli    15 年前

    如果您谈论的是std::string,那么大小t的无效值是std::string::npos。 通常,不应该使用-1,因为大小不带符号,并且在执行类型间隐式转换的编译器上,可以进行失败的比较。

    也就是说,std::strings的npos设置为0xffffffffffffffffffffffff…它是-1的二元等价物。它还计算为无符号大小字段的最大允许值。

        3
  •  3
  •   Naveen    15 年前

    基本上你不能。您使用的任何值都可能是有效值。最好传递一个标志,说明它无效。

        4
  •  1
  •   Igor    15 年前

    你怎么表示 int 无效吗?-1是int的有效值。这些类型没有指定的“无效”值。您可以决定选择一个特定的值(通常不可能是变量所代表的值)来表示非法值,但这是您自己的定义,而不是人们通常使用的值。

    就个人而言,我不喜欢这样。我更喜欢创建另一个变量, bool IsValid 也就是说,该大小变量的值是否有效。有时,创建一个类来封装它们甚至更好。

        5
  •  1
  •   Vadim Sukhorukov    8 年前

    我的版本是:

    #include <limits>
    #define invalid_index std::numeric_limits<size_t>::max()