2016-07-22 65 views
0
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;} 
} 

这是一个非常天真的问题。我明白代码中错误的含义。任何人都可以告诉我,为什么它不接受条件中的退货声明。 如果我写上面的代码为不返回,在函数返回非void {在日食CDT}

bool checking() const //definition 
{ if(Save==0) {return cc_t < 0} 
    else {return cc_i < 0;} 
} 

那么,没有警告..?

+0

什么是 '保存' 的类型? –

+1

只是因为这种方式'返回'声明可能永远达不到 – DimChtz

+0

你的代码缺少';',否则它是合法的,如果一个坏主意。警告是因为如果保存为3,您的代码将执行未定义的行为。 – Yakk

回答

3

实际上Save的类型是什么?您在其他可能的分支中缺少return声明。关于该警告的内容不清楚?

inline bool isZombie() const //definition 
{ if(Save==0) {return cc_t < 0;} 
          //^Supposed this is a typo 
    if(Save==1) {return cc_i < 0;} 
    return false; // <<<<<<<<<<<<<<<<<<<<<<<<<<< 
} 
+0

即使Save是一个bool,如果eclipse错过了逻辑,我也不会感到震惊。 –

+0

πάνταῥεῖ的例子允许你如果被处理两次(通常是不好的设计),但是;在功能上它返回第一个,第二个或默认为false。默认为false是这里的关键。 – M4rc

+0

@JohanLundberg你确实相信这是Eclipse-CDT的问题吗? –

1

通常,最好有一个确定的回报路径。

例如,一个可以写为(并保持你的代码大多不变):

inline bool isZombie() const { 
    if(Save==0) 
     return cc_t < 0; 
    else 
     return cc_i < 0; 
} 

,或者:

inline bool isZombie() const { 
    bool rVal = (cc_i < 0); 
    if(Save==0) 
    return cc_t < 0; 
    return rVal; 
} 
+2

或'return((Save == 0)?cc_t:cc_i)<0;' – GManNickG

+0

的确,但我想保持现有格式的易于追踪的逻辑。对于一些人来说,可读性会产生更好的理解这并不意味着你的建议会变得更加正确,这取决于他在C++中的曝光可能难以在心理上进行解析。 – M4rc