C++ 如果将此函数放在泛型库中,会导致什么错误?
如果将此函数放在泛型库中,会出现什么问题。我如何修改代码来避开这个问题?C++ 如果将此函数放在泛型库中,会导致什么错误?,c++,c,data-structures,C++,C,Data Structures,如果将此函数放在泛型库中,会出现什么问题。我如何修改代码来避开这个问题? 如果将此代码放在通用库中,它会返回正确的字符串长度吗?一个问题是调用之间的状态持续存在: int foo(char *p) { static int i = 0; if (*p == '\0') return i; i++; return foo(p+1); } 第二次调用将返回不正确的结果,因为i未重置。如果连续调用两次,i将不是您期望的结果。这是因为它是在启动时初始化的,并在调用过程中保留其以前的值 此外,它不能很
如果将此代码放在通用库中,它会返回正确的字符串长度吗?一个问题是调用之间的状态持续存在:
int foo(char *p)
{
static int i = 0;
if (*p == '\0') return i;
i++;
return foo(p+1);
}
第二次调用将返回不正确的结果,因为
i
未重置。如果连续调用两次,i
将不是您期望的结果。这是因为它是在启动时初始化的,并在调用过程中保留其以前的值
此外,它不能很好地处理线程,当“搜索空间”迅速减少时,最好使用递归的思想,比如二进制搜索在每个递归级别将空间减半
使用递归逐个字符地处理字符串是一个愚蠢的想法,因为一次只能减少一个字符的搜索空间。为什么要问这个问题?我希望这段代码永远不会放在任何库中。它不是线程安全的,不检查或断言
NULL
,在多次调用时行为怪异,效率低下。我想这只是一个随机的家庭作业问题。如果你不知道泛型库是什么,那么你显然没有把这些代码放到泛型库中,所以这个问题是没有意义的。这就像当你不知道如何骑独轮车时问:“如果我在骑独轮车之前喝了这个怎么办?”对我来说这似乎是一个相当合理的家庭作业问题,教我什么是静态局部变量。如果“什么是C语言中的通用库”真的是作业的一部分(而不是由提问者添加),那么我希望它只是检查学生是否理解讲座或其他辅助材料中使用的术语。
foo("hello");
foo("world");