返回垃圾值C++
我有一个方法,假设在树中找不到项时返回一个垃圾值。我得到的只是一个运行时异常:垃圾在未定义的情况下被使用返回垃圾值C++,c++,C++,我有一个方法,假设在树中找不到项时返回一个垃圾值。我得到的只是一个运行时异常:垃圾在未定义的情况下被使用 ItemType BstClass::rRetrieve(node* trav, KeyType key, bool& inTree) { if(trav == NULL) { inTree = false; ItemType garbage; return garbage - 1; } if(trav-
ItemType BstClass::rRetrieve(node* trav, KeyType key, bool& inTree)
{
if(trav == NULL)
{
inTree = false;
ItemType garbage;
return garbage - 1;
}
if(trav->data.key == key)
{
inTree = true;
return trav->data;
}
else if (key < trav->data.key)
return(rRetrieve(trav->left, key, inTree));
else
return(rRetrieve(trav->right, key, inTree));
}// end rRetrieve
如果没有更多信息,这只是猜测,但是:
ItemType garbage = -1;
return garbage;
如果没有更多信息,这只是猜测,但是:
ItemType garbage = -1;
return garbage;
垃圾值是指不在函数可以返回的预期有效值集中,但在函数可以返回的值集中的任何值。例如,如果您的树包含正数,并且您从树搜索函数返回一个带符号的int,那么垃圾值就是任何负数。在本例中,我将返回-1作为垃圾值 对于你的情况,我可能会更换线路
return garbage - 1;
与
垃圾值是指不在函数可以返回的预期有效值集中,但在函数可以返回的值集中的任何值。例如,如果您的树包含正数,并且您从树搜索函数返回一个带符号的int,那么垃圾值就是任何负数。在本例中,我将返回-1作为垃圾值 对于你的情况,我可能会更换线路
return garbage - 1;
与
我知道这可能超出了范围,但当您没有要返回的Sensive值时,可以使用boost::optional。更多信息请访问:我知道这可能超出了范围,但如果没有可返回的Sensive值,则可以使用boost::optional。更多信息请访问:看起来您在计算中使用了“垃圾”,而之前没有对其进行初始化。或许
ItemType garbage = 0;
return garbage - 1;
共享和享受。看起来您在计算中使用了“垃圾”,而之前没有对其进行初始化。或许
ItemType garbage = 0;
return garbage - 1;
分享和享受。垃圾的主要特性是它可以是任何东西。仅仅通过查看值无法判断某个值是否是垃圾。例如,用一些任意选择但确定的值零初始化垃圾变量并返回它
实际上,在C++语言中,在一般情况下,任何操作未初始化变量的值都会导致未定义的行为。您不能在C++中返回真正的垃圾。如果要返回变量或对其应用算术运算,必须初始化变量。
垃圾的主要属性是它可以是任何东西。仅仅通过查看值无法判断某个值是否是垃圾。例如,用一些任意选择但确定的值零初始化垃圾变量并返回它实际上,在C++语言中,在一般情况下,任何操作未初始化变量的值都会导致未定义的行为。您不能在C++中返回真正的垃圾。如果要返回变量或对其应用算术运算,则必须初始化变量。
答案取决于我们无法访问的类ItemType的详细信息。根据您可以对ItemType执行何种操作,以及您对“垃圾”值有何种要求,理论上您有两种选择 直接构造并返回“垃圾”值。类似于returnitemtype-1;或返回ItemTypeNULL;具体来说,构造垃圾值的方式取决于所拥有的构造函数及其语义。 也许你甚至不应该关心具体的值。由于您有一个inTree输出变量来指示何时未找到值,因此可能只返回默认值return ItemType;因为代码不再是冗余的,也就是说,对于方法1,如果调用方不检查inTree,那么希望使用“垃圾”可以防止代码出错。答案取决于我们无法访问的类ItemType的详细信息。根据您可以对ItemType执行何种操作,以及您对“垃圾”值有何种要求,理论上您有两种选择 直接构造并返回“垃圾”值。类似于returnitemtype-1;或返回ItemTypeNULL;具体来说,构造垃圾值的方式取决于所拥有的构造函数及其语义。 也许你甚至不应该关心具体的值。由于您有一个inTree输出变量来指示何时未找到值,因此可能只返回默认值return ItemType;因为代码不再是冗余的,也就是说,对于方法1,如果调用方不检查inTree,那么希望使用“垃圾”可以防止代码出错。
你能展示一下你所指的全部代码吗?对于初学者来说,我们不知道函数应该返回什么。使用复制和粘贴发布所有相关代码,即完整的函数。ItemType声明也可能有帮助。没有垃圾值这样的东西。ISO C++标准定义了
e单位化POD类型变量的值不确定,这可能意味着任何事情,包括陷阱表示;因此,访问它会导致未定义的行为,例如,一致性实现可能编译您的程序并生成返回时崩溃的代码。也许您应该使用const定义。常量int垃圾值=-1;然后在找不到项时返回垃圾值。您能显示您所指的全部代码吗?对于初学者来说,我们不知道函数应该返回什么。使用复制和粘贴发布所有相关代码,即完整的函数。ItemType声明也可能有帮助。没有垃圾值这样的东西。ISO C++标准定义了一个单化的POD型变量的值作为不确定的,并且这可能意味着任何东西,包括陷阱表示;因此,访问它会导致未定义的行为,例如,一致性实现可能编译您的程序并生成返回时崩溃的代码。也许您应该使用const定义。常量int垃圾值=-1;然后在找不到项目时返回垃圾值。盲目猜测质量,但是是的,信息太少,无法做出好的回答盲目猜测质量,但是是的,信息太少,无法做出好的回答