C 大小\u t的值无效
人们用什么来表示尺寸无效-1不起作用,0可以是有效的大小。基本上不能。您使用的任何值都可能是有效的。最好传递一个表明它无效的标志。也许C 大小\u t的值无效,c,C,人们用什么来表示尺寸无效-1不起作用,0可以是有效的大小。基本上不能。您使用的任何值都可能是有效的。最好传递一个表明它无效的标志。也许((大小)-1) 严格地说,这是一个有效的尺寸,但一旦你有了这个尺寸,你就不可能需要任何其他尺寸;-) 您如何表示int无效-1是int的有效值。这些类型没有指定的“无效”值。您可以决定选择一个特定的值(通常不可能是您的变量所表示的值)来表示非法值,但这是您自己的定义,而不是人们通常使用的 就我个人而言,我不喜欢这种方式。我更喜欢创建另一个变量,boolisval
((大小)-1)
严格地说,这是一个有效的尺寸,但一旦你有了这个尺寸,你就不可能需要任何其他尺寸;-) 您如何表示
int
无效-1是int的有效值。这些类型没有指定的“无效”值。您可以决定选择一个特定的值(通常不可能是您的变量所表示的值)来表示非法值,但这是您自己的定义,而不是人们通常使用的
就我个人而言,我不喜欢这种方式。我更喜欢创建另一个变量,
boolisvalid
,它将说明该size\t变量的值是否有效。有时,创建一个类来封装它们可能更好。如果您谈论的是std::string,那么size\t的无效值是std::string::npos。
通常不应该使用-1,因为大小\u t是无符号的,并且在类型之间进行隐式转换的编译器上可能会进行失败的比较
也就是说,std::strings的npos设置为0xffffffffffffff。。。这是-1的二进制等价物。它还计算为无符号大小字段允许的最大值。我的版本是:
#include <limits>
#define invalid_index std::numeric_limits<size_t>::max()
#包括
#定义无效的索引std::numeric\u limits::max()
一些C99多字节字符串函数执行以下操作:它们返回(size\u t)(-1)
甚至(size\u t)(-2)
,表示异常情况;它不是最优的,但在实践中是有效的;如果问题的原因是错误处理,那么最好将指针作为附加参数传递给错误变量(例如\u Bool
类型的错误标志、int
类型的错误代码或const char*
类型的错误消息)。是的,这是一种常见的习惯用法。你也可能经常看到(时间)-1
。@MichaelKrelin hacker:(时间)-1
有点不同;标准明确规定,如果无法确定当前时间,则这是time()
返回的值。而且time\u t
通常是有符号的类型,因此(time\u t)-1
通常比大纪元早1秒。@KeithThompson,虽然没有进一步反驳您的说法,但我不明白它如何使(time\u t)-1
在我们的叙述范围内“有点不同;”@MichaelKrelin hacker:(size\u t)-1正好位于类型size\u t
范围的上限。通常不可能有这么大的对象,使其成为合适的带内信令值。另一方面,对于“代码”> TimeTyt < /C>最常见的表示为1970秒后的符号整数,<代码>(TimeTyt)-1 < /C> >位于可表示范围的中间,难以区分错误条件和1960-1231 31∶59:59 UTC的合法时间。非size_t
;-)还是。。。剩下的答案是纯金。纯金!除了语法错误之外,什么是std::string
?(提示:问题标记为“c”。)僵尸就在我们的门口!-1“不起作用”是怎么回事?就个人而言,我拒绝使用非POSIX系统,我依赖可用的ssize\u t
。std::numeric\u limits::max()
不会在C
中编译,因为这个问题被标记了。