C++ 结构定义调试与发布模式上的变量初始化
我正在处理一些要加载到Windows上的DLL。在调试模式下,一切正常。在发布模式下也可以工作,但我已经发现了一些在类初始化时必须解决的问题 我知道这是一个简单而基本的问题,但由于我已经发现了一些问题,我并没有在发布模式上100%地强调选项a 真的是这样的吗,某种优化可能会绕过变量初始化,比如发布模式上的A,所以最好总是像B一样,或者可能在我发现的情况下发生了其他错误?(不是这个,现在很难追踪) 我正在使用MSVC++14.16 _MSC_VER==1916(Visual Studio 2017版本15.9) (A) (B)C++ 结构定义调试与发布模式上的变量初始化,c++,windows,C++,Windows,我正在处理一些要加载到Windows上的DLL。在调试模式下,一切正常。在发布模式下也可以工作,但我已经发现了一些在类初始化时必须解决的问题 我知道这是一个简单而基本的问题,但由于我已经发现了一些问题,我并没有在发布模式上100%地强调选项a 真的是这样的吗,某种优化可能会绕过变量初始化,比如发布模式上的A,所以最好总是像B一样,或者可能在我发现的情况下发生了其他错误?(不是这个,现在很难追踪) 我正在使用MSVC++14.16 _MSC_VER==1916(Visual Studio 2017
您需要对您发现的“一些问题”进行一些描述。更好的是,给出一个可编译的例子,这样人们可以自己看到问题,并在自己的机器上进行实验。知道问题是否简单和基本的唯一方法是知道问题是什么。既然你知道它是简单和基本的。。。(对你的问题有更多的信心,对你的结论是否正确有更少的信心。描述你所看到的。描述你所尝试的。给人们一个机会通过提供一个测试来检查你的结论。)调试生成倾向于将未初始化的变量初始化为0。“隐藏”读取未初始化变量的UB。检查您的初始化。我个人更喜欢一种样式,然后是初始化列表:
slista_meta::slista_meta(IBlock*bk):rodando(false),parar(false){}
。
struct slista_meta
{
slista_meta(IBlock * bk);
bool rodando = false, parar = false;
}
slista_meta::slista_meta(IBlock * bk)
{
rodando = parar = false;
}