我有一个第三方库代码段,其结构如下:

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仅用于记录日志,并且您应该返回Anull,抛出异常或无论您需要什么,但都必须在不返回任何内容的情况下到达函数末尾。



我不知道为什么VS2012编译,而恕我直言,它不应该编译,但是即使编译了,也不编写那样的代码,您以后在项目中会得到一些惊喜。

关于c++ - 控件可能到达非空函数xcode的末尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30843441/

10-16 19:15
查看更多