【发布时间】:2021-01-22 20:47:39
【问题描述】:
我想返回堆栈中的最后一个。类似于以下内容:
Item* get_last_item()
{
if (item_stack_size == 0) {
// return <nothing> ?
} else {
return ItemStack[item_stack_size-1];
}
}
如果堆栈为空,则在返回 null 值的等价物时,建议的做法是什么?这通常会发出硬错误吗?类似于(Item*) 0 的值,或者建议的做法是什么?我的第一个想法是做这样的事情,但我不确定是否有更好的方法:
Item* get_last_item()
{
return (item_stack_size != 0) ? ItemStack[item_stack_size-1] : (void*) 0;
}
【问题讨论】:
-
一般来说,对于任何返回值或可能失败的函数,您有两种选择:(1)返回“带外”值,或(2)返回单独的成功/失败状态与返回值分开。两种方法都有其优点和缺点。对于指针,
NULL是您可以使用的出色带外值。对于字符,EOF。但是对于任意整数,通常没有一个值是不合法的。由于您的get_last_item函数返回指针,因此NULL可能是不错的选择——只要调用者总是仔细检查它! -
@SteveSummit 我明白了,谢谢。您想更详细地说明这两种情况的答案吗?
-
不,不只是现在,我应该在工作。 :-)
-
@SteveSummit 哈哈,好吧!自己返回
NULL可以吗,还是一定要(Item*) NULL? -
@samuelbrody1249 在我的系统上(也可能在许多系统上)
NULL被定义为((void *)0)。并且截至cppreference:空指针常量可以转换为任何指针类型;这种转换会产生该类型的空指针值。