内联成员(VS2013)缺少退货没有错误

时间:2014-05-28 03:44:47

标签: c++ visual-c++ visual-studio-2013

以下代码仅抛出"缺少返回值"概述成员的错误,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 个答案:

答案 0 :(得分:4)

C ++11§6.6.3[stmt.return] / 2状态:

  

离开函数末尾相当于没有值的返回;这会导致值返回函数中的未定义行为。

行为未定义,因此编译器不需要诊断错误。

为什么编译器不能诊断错误?因为函数GetI是在类定义中内联定义的,所以它是内联隐式声明的。如果实际使用它们,编译器将仅生成内联函数的代码。您的程序不使用GetI函数,因此编译器不会为其生成代码,因此编译器不会检测缺少的return语句。

如果您修改程序以使用GetI函数,则编译器必须为该函数生成代码,然后检测缺少的return语句。

函数GetIN不是内联的,因此编译器必须为它生成代码,因为它只在那个地方定义。