我有一个第三方库代码段,其结构如下:
class A;
A func()
{
if(...)
{
return A(...);
}
else if(...)
{
return A(...);
}
else
{
LOG(...);
}
}
并在Xcode中给出错误“控件可能会到达非void函数的结尾”。
相同的段可以在VS2012中编译,没有任何问题。 Xcode c ++编译器方言和标准库设置为C ++ 89和libstdc ++。我知道这是预期的行为,但是vs2012编译器的行为不符合标准吗?
最佳答案
当写类似
Type func()
{
...
}
编译器希望您在函数的每个路径中返回类型为
Type
的对象,这不是您在此处所做的。或者您的
LOG
函数返回一个A
对象,对此我表示怀疑,您应该编写return LOG()
,或者您的LOG
仅用于记录日志,并且您应该返回A
,null
,抛出异常或无论您需要什么,但都必须在不返回任何内容的情况下到达函数末尾。我不知道为什么
VS2012
编译,而恕我直言,它不应该编译,但是即使编译了,也不编写那样的代码,您以后在项目中会得到一些惊喜。关于c++ - 控件可能到达非空函数xcode的末尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30843441/