C++ 无返回,在函数中返回非void{in eclipse CDT} Save=0; 布尔检查()常量///宣言 内联bool isZombie()常量//定义 {if(Save==0){返回cc_t
这是一个非常天真的问题。我理解代码中错误的含义。有谁能告诉我,为什么它不接受条件中的返回语句。 如果我把上面的代码写成C++ 无返回,在函数中返回非void{in eclipse CDT} Save=0; 布尔检查()常量///宣言 内联bool isZombie()常量//定义 {if(Save==0){返回cc_t,c++,eclipse,c++11,eclipse-cdt,C++,Eclipse,C++11,Eclipse Cdt,这是一个非常天真的问题。我理解代码中错误的含义。有谁能告诉我,为什么它不接受条件中的返回语句。 如果我把上面的代码写成 Save=0; bool checking() const; ///declaration inline bool isZombie() const //definition { if(Save==0) {return cc_t < 0} if(Save==1) {return cc_i < 0;} } bool checking()常量//定义 {
Save=0;
bool checking() const; ///declaration
inline bool isZombie() const //definition
{ if(Save==0) {return cc_t < 0}
if(Save==1) {return cc_i < 0;}
}
bool checking()常量//定义
{if(Save==0){返回cc_t<0}
else{return cc_i<0;}
}
然后,就没有警告了。保存的类型实际上是什么?在其余可能的分支中缺少
return
语句。这个警告有什么不清楚的地方
bool checking() const //definition
{ if(Save==0) {return cc_t < 0}
else {return cc_i < 0;}
}
inline bool isZombie()常量//定义
{if(Save==0){返回cc_t<0;}
//^假设这是一个打字错误
如果(Save==1){返回cc_i<0;}
return false;//实际的保存类型是什么?在其余可能的分支中缺少return
语句。该警告有什么不清楚的地方
bool checking() const //definition
{ if(Save==0) {return cc_t < 0}
else {return cc_i < 0;}
}
inline bool isZombie()常量//定义
{if(Save==0){返回cc_t<0;}
//^假设这是一个打字错误
如果(Save==1){返回cc_i<0;}
return false;//通常,最好有一个确定的返回路径
例如,可以将其编写为(并保持代码基本不变):
inline bool isZombie()常量{
如果(保存==0)
返回cc_t<0;
其他的
返回cc_i<0;
}
或者,或者:
inline bool isZombie() const {
if(Save==0)
return cc_t < 0;
else
return cc_i < 0;
}
inline bool isZombie()常量{
bool-rVal=(cc_i<0);
如果(保存==0)
返回cc_t<0;
返回rVal;
}
一般来说,最好有一个确定的返回路径
例如,可以将其编写为(并保持代码基本不变):
inline bool isZombie()常量{
如果(保存==0)
返回cc_t<0;
其他的
返回cc_i<0;
}
或者,或者:
inline bool isZombie() const {
if(Save==0)
return cc_t < 0;
else
return cc_i < 0;
}
inline bool isZombie()常量{
bool-rVal=(cc_i<0);
如果(保存==0)
返回cc_t<0;
返回rVal;
}
什么是“保存”类型?因为这样可能永远无法访问return
语句您的代码缺少一个;
,否则如果一个坏主意是合法的。警告是因为如果Save为3,您的代码执行未定义的行为。当Save
为2或更多时,您的isZombie
函数中会发生什么?什么是“保存”类型?仅仅因为这样可能永远无法访问return
语句您的代码缺少一个;
,否则如果一个坏主意是合法的。警告是因为如果Save为3,您的代码执行未定义的行为。当Save
为2或更多时,isZombie
函数中会发生什么?甚至如果Save是一个bool,那么如果eclipse忽略了逻辑,我不会感到震惊ῥεῖ '示例允许您的if被处理两次(这通常是糟糕的设计);但从功能上讲,它会将第一个、第二个或默认值返回为false。这里的关键是将默认值返回为false。@JohanLundberg您真的相信这是Eclipse CDT的问题吗?@πάνταῥεῖ, 我只是在猜测:如果Save
是一个bool
的话,我不希望clang或gcc对显示的代码发出警告。@JohanLundberg确切地说,这将是所使用的工具链的问题,而不是Eclipse CTD的问题,除非提及intellisense。即使Save是一个bool,如果Eclipse遗漏了逻辑,我也不会感到震惊。πῥεῖ '示例允许您的if被处理两次(这通常是糟糕的设计);但从功能上讲,它会将第一个、第二个或默认值返回为false。这里的关键是将默认值返回为false。@JohanLundberg您真的相信这是Eclipse CDT的问题吗?@πάνταῥεῖ, 我只是在猜测:如果Save
是bool
的话,我不希望clang或gcc对显示的代码发出警告。@JohanLundberg确切地说,这将是所使用的工具链的问题,而不是Eclipse CTD,除非提及intellisense。或者返回((Save==0)?cc\t:cc\I)<0;确实如此,但我希望以他现在的格式保持和容易地追踪逻辑。对于某些人来说,可读性会产生更好的理解。这不是因为你的建议更正确,这取决于他的C++暴露,这可能更难在精神上解析。或者<代码>返回((保存=0)Ccct:CcI i)。<0;确实如此,但我希望以他现在的格式保持和容易地追踪逻辑。对于某些人来说,可读性会产生更好的理解。这并不是因为你的建议更正确,这取决于他的C++暴露,这可能更难在精神上解析。