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++暴露,这可能更难在精神上解析。