在内联成员(VS2013)中没有返回错误
No error on missing return for inlined member (VS2013)
下面的代码仅为概述的成员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
不是内联的,所以编译器必须为它生成代码,因为它只在一个地方定义。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- glad 导致 glfwSwapBuffers 返回错误消息
- 我的模板类方法返回错误类型?
- 共享内存:MapViewOfFile 返回错误 5
- 使用 std::forward_list 返回错误的队列实现
- FFMPEG:sws_scale返回错误:切片参数 0, 2160 无效
- __int64 CString 返回错误的值 - C++ MFC
- C++ OpenGL 中,绘制形状返回错误
- Python os.system() 返回错误值
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- LibClang clang_getArgType() 返回错误的类型
- 除法函数返回错误的值
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 矩阵逆变器返回错误的反转
- openCL-创建子缓冲区返回错误代码13
- Qt SQL LIKE语句返回错误
- GetLastError()从FtpPutFile()返回错误6
- PfCreateInterface返回错误120(未实现)
- 为什么 Pa_GetStreamTime() 返回错误?
- G++ 在尝试使用 G++ 使用 openCV 进行编译后返回错误