在内联成员(VS2013)中没有返回错误

No error on missing return for inlined member (VS2013)

本文关键字:返回 错误 VS2013 成员      更新时间:2023-10-16

下面的代码仅为概述的成员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++;
}

c++ 11§6.6.3返回)/2:

从函数末尾流出相当于没有返回值;这将导致值返回函数中的未定义行为。

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

为什么编译器不诊断错误?因为函数GetI在类定义中是内联定义的,所以它被隐式声明为内联。编译器只会在实际使用内联函数时生成代码。您的程序没有使用GetI函数,因此编译器不会为它生成代码,因此编译器不会检测到缺失的返回语句。

如果你修改你的程序来使用GetI函数,编译器将不得不为该函数生成代码,然后检测缺失的返回语句。

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