Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 大小\u t的值无效_C - Fatal编程技术网

C 大小\u t的值无效

C 大小\u t的值无效,c,C,人们用什么来表示尺寸无效-1不起作用,0可以是有效的大小。基本上不能。您使用的任何值都可能是有效的。最好传递一个表明它无效的标志。也许((大小)-1) 严格地说,这是一个有效的尺寸,但一旦你有了这个尺寸,你就不可能需要任何其他尺寸;-) 您如何表示int无效-1是int的有效值。这些类型没有指定的“无效”值。您可以决定选择一个特定的值(通常不可能是您的变量所表示的值)来表示非法值,但这是您自己的定义,而不是人们通常使用的 就我个人而言,我不喜欢这种方式。我更喜欢创建另一个变量,boolisval

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

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

也许
((大小)-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
中编译,因为这个问题被标记了。