内联成员缺少返回没有错误(VS2013)
Posted
技术标签:
【中文标题】内联成员缺少返回没有错误(VS2013)【英文标题】:No error on missing return for inlined member (VS2013) 【发布时间】:2014-05-28 03:44:46 【问题描述】:以下代码仅对概述的成员 GetIN 引发“缺少返回值”错误。内联的不会引发错误。如果我在类中使用该方法,我会得到两者的错误。这对我来说似乎完全错误。标准中是否有关于编译器忽略内联方法的返回值之类的内容? (这是用 Visual Studio 2013 编译的)
class MyClass
public :
MyClass()
: m_i(0)
int GetI() m_i++;
int GetIN();
private:
int m_i;
;
int main()
return 0;
int MyClass::GetIN()
m_i++;
【问题讨论】:
注意:一般情况下编译器无法准确诊断返回失败;这需要解决停机问题。 【参考方案1】:C++11 §6.6.3[stmt.return]/2 状态:
从函数的末尾流出相当于没有值的返回;这会在返回值的函数中导致未定义的行为。
行为未定义,因此编译器不需要诊断错误。
为什么编译器不诊断错误?因为函数GetI
是在类定义中内联定义的,所以它被隐式声明为内联。编译器只会为实际使用的内联函数生成代码。您的程序没有使用GetI
函数,因此编译器不会为其生成任何代码,因此编译器不会检测到缺少的返回语句。
如果您修改程序以使用GetI
函数,编译器必须为该函数生成代码,然后检测缺少的返回语句。
函数GetIN
不是内联的,所以编译器必须为它生成代码,因为它只定义在那个地方。
【讨论】:
以上是关于内联成员缺少返回没有错误(VS2013)的主要内容,如果未能解决你的问题,请参考以下文章
注意:缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义
如何解决“缺少vtable通常意味着第一个非内联虚成员函数没有定义。”