我刚刚在我的代码中发现了一个非常危险的错误,我觉得它应该被编译器捕获。我说错了吗?本质上,类的引用成员允许在构造函数中由自身初始化。下面是在Visual 2017中编译而没有错误或警告的测试代码:
struct foo
{
foo() : reference(reference) {}
int& reference;
};
int main()
{
foo fooOb;
}更新:我看到2009年有一个类似的问题。其他编译器在2017年的表现是一样的吗?还是它是VS 2017的问题?如果他们这么做了,我会觉得这是合法的C++,但我看不出这是怎么回事。
发布于 2019-07-09 16:28:47
其他编译器在2017年的表现是一样的吗?还是它是VS 2017的问题?
在写这篇文章时:
-Winit-self和-Wuninitialized分别发出警告。如果他们这么做了,我会觉得这是合法的C++,但我看不出这是怎么回事。
从某种意义上说,编译器不需要失败编译,这是合法的,但这从来不是您想要的,因为您将触发UB。
发布于 2019-07-09 16:39:43
2017年MSVC收益率:
警告C26495:变量'foo::reference‘未初始化。始终初始化成员变量(类型6)
您可能需要通过转到Properties ->代码分析(/analyze)来启用代码分析
https://stackoverflow.com/questions/56956828
复制相似问题